在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 ...