Python中的深淺copy

2021-08-22 06:02:33 字數 1017 閱讀 8687

在python中的深淺copy和其他語言中的不同,在c語言中,只要位址發生變化的都是深copy,位址不發生變化的都是淺copy。

但是在python中卻不一樣,在python中分兩種情況來解釋深淺copy。

第一種情況,當列表中不存在其他其他列表元素的時候,這個時候深copy和淺copy是相同的,都是建立乙個位址,將所有的值放入其中,我們如果實驗的話這個是都是建立新的位址,但是等到第二種情況下才是真正的python中深淺copy最大的區分。也是大家比較容易搞錯的地方。

第二種情況:當copy的列表中含有其他列表元素的時候,這個時候深copy和淺copy就有極大的不同。

當其是淺copy時,建立了乙個新的位址,對列表內所有的元素都複製,然而當遇到列表元素時,他只是引用原來的元組的位址,我們可以輸出位址就可以明確的知道了,

但是當其是深copy時,也是建立了乙個新的位址,對其列表內的元素都複製,當遇到列表元素時,這個時候它又建立了乙個新的位址,將列表元素中的所有元素都複製了一遍,這個時候這個列表元素的位址也是乙個新的位址。

from  copy import copy,deepcopy

a = [1,2,1,[1,2,1]]

b = a

print(a == b)

print(id(a),id(b))

print(a is b)

c = copy(a)

d = deepcopy(a)

print(a == c)

print(d == a)

print(a is c)

print(a is d)

print(id(a), id(c), id(d))

print(id(a[3]), id(c[3]), id(d[3]))

通過上邊的**塊就可以看出其位址的不同,接下來再畫個圖,了解一下它。

這個是深copy模擬位址。

詳解python中的深淺copy

copy就是複製乙份,也就是所謂的抄乙份。深淺copy其實就是完全複製乙份,和部分複製乙份的意思。l1 1,2,3,barry alex l2 l1 l1 0 111 print l1 111,2,3,barry alex print l2 111,2,3,barry alex l1 3 0 wus...

python列表中的深淺copy

列表中的賦值和平常的賦值是不一樣的,看下面的 in 1 a 1in 2 b a in 3 a out 3 1in 4 b out 4 1in 5 id a out 5 4452948992in 6 id b out 6 4452948992in 7 id 1 out 7 4452948992in 8...

補充 python深淺copy

name liming lilongfei duanwenchao tangeng 11 yuxiaobin name2 name.copy 淺copy,只copy第一層 print name print name2 name 1 haha 當修改name的第一層時,name2不發生變化 name ...