Python 深拷貝 淺拷貝

2022-08-25 16:48:36 字數 857 閱讀 2890

本文章主要對深拷貝和淺拷貝進行說明

舉例:

s1 = [1,1,2,3,4,5,6,8]

for i in

lists:

if i%2 !=0:

lists.remove(i)

print(lists)#

結果為[1,2,4,6,8]

以上例子說迴圈刪除list裡面的資料的時候,結果會不正確

將上面的**該為如下:

s1 = [1,1,2,3,4,5,6,8]

s2 = [1,1,2,3,4,5,6,8]#s1和s2記憶體位址不同,如果此處改為s2 = s1 則迴圈結果也不正確,因為s2 = s1只是拷貝了記憶體位址,兩個列表的記憶體位址相同指的都是同乙個資料

for i in

s2:

if i%2 !=0:

s1.remove(i)

print(s1)#

結果為[2,4,6,8]

#print(id(s1))

#print(id(s2))#用id()方法可檢視列表的記憶體位址

原因:迴圈刪除時下標從0開始,第二次迴圈時下標為1,第一次迴圈後列表值為[1,2,3,4,5,6,8]

下標從1開始取值取到了2,並不是1,所以迴圈刪除list裡面的資料時,結果會不正確;

修改後**中迴圈列表s2刪除列表s1就沒問題

二、深拷貝、淺拷貝

1、深拷貝:會重新開闢一塊記憶體

import

copy#深拷貝需要引入copy模組

s2.deepcopy(s1)#如例子中的s2 = [1,2,3,4,5,6,8]

s2 = s1

python 淺拷貝 深拷貝

直接賦值 其實就是物件的引用 別名 淺拷貝 copy 拷貝父物件,不會拷貝物件的內部的子物件。深拷貝 deepcopy copy 模組的 deepcopy 方法,完全拷貝了父物件及其子物件。usr bin python import copy a 1,2,3,4,a b 原始物件 b a 賦值,傳物...

python深拷貝 淺拷貝

在python中,物件賦值實際上是物件的引用。當建立乙個物件,然後把它賦給另乙個變數的時候,python並沒有拷貝這個物件,而只是拷貝了這個物件的引用 一般有三種方法,alist 1,2,3,a b 1 直接賦值,傳遞物件的引用而已,原始列表改變,被賦值的b也會做相同的改變 alist 1,2,3,...

python 深拷貝 淺拷貝

淺拷貝是對於乙個物件的頂層拷貝 通俗的理解是 拷貝了引用,並沒有拷貝內容 深拷貝是對於乙個物件所有層次的拷貝 遞迴 拷貝字典 值相當於鍵的引用 所以copy.copy 為淺拷貝 淺拷貝對不可變型別和可變型別的copy不同 copy.copy對於可變型別,會進行淺拷貝 copy.copy對於不可變型別...