1. 程式人生 > 其它 >python 深淺拷貝總結

python 深淺拷貝總結

技術標籤:pythonpython

關於deepcopy和copy:

1)copy就是淺copy,意思是把物件a的所有內容,找到一個記憶體空間再存放一份,再賦值為新的變數。比如:

a=[1,2,3]
from copy import copy
cpy_a = copy(a)

此時cpya=[1,2,3],對cpy_a執行操作:cpy_a.append(4),會得到cpy_a=[1,2,3,4],a=[1,2,3],不會影響a的值。

注意區分:copy和賦值,賦值是簡單的寫了個別名,比如:

a=[1,2,3]
b=a

此時id(a)如果是6123L,那麼id(b)也是6123L,兩者的地址一樣,只是名字不同,與淺copy是不一樣的

2)deepcopy就是深拷貝,針對只含有值的物件來說,淺copy就可以滿足,但如果一個物件中又含有其他物件,使用淺copy就只會把包含的id給複製一份,那麼對新物件的內容的操作就會影響到舊物件的內容。此時就只能使用深copy,即遞迴查詢引用物件,找到記憶體單元,拷貝內容並開闢記憶體空間,再存放一份。

a=[1,2]
b=[a,a]#這裡是直接引用,就是物件包含物件,想拷貝只能使用深拷貝
from copy import deepcopy
c=deepcopy(b)

此時c=[[1,2],[1,2]]。執行c[0].append(3)此時c=[[1,2,3],[1,2,3]],b=[[1,2],[1,2]]不影響b的內容。

原文章連結:https://zhuanlan.zhihu.com/p/61904991

只是自己方便學習,不用於它用!