python的copy模塊理解

首先直接上結論:python

—–咱們尋常意義的複製就是深複製,即將被複制對象徹底再複製一遍做爲獨立的新個體單獨存在。因此改變原有被複制對象不會對已經複製出來的新對象產生影響。 
—–而淺複製並不會產生一個獨立的對象單獨存在,他只是將原有的數據塊打上一個新標籤,因此當其中一個標籤被改變的時候,數據塊就會發生變化,另外一個標籤也會隨之改變。這就和咱們尋常意義上的複製有所不一樣了。spa

對於簡單的 object,用 shallow copy 和 deep copy 沒區別code

複雜的 object, 如 list 中套着 list 的狀況,shallow copy 中的 子list,並未從原 object 真的「獨立」出來。也就是說,若是你改變原 object 的子 list 中的一個元素,你的 copy 就會跟着一塊兒變。這跟咱們直覺上對「複製」的理解不一樣。對象

看不懂文字不要緊咱們來看代碼:blog

>>> import copy >>> origin = [1, 2, [3, 4]] #origin 裏邊有三個元素:1, 2,[3, 4] >>> cop1 = copy.copy(origin) >>> cop2 = copy.deepcopy(origin) >>> cop1 == cop2 True >>> cop1 is cop2 False #cop1 和 cop2 看上去相同,但已再也不是同一個object >>> origin[2][0] = "hey!" >>> origin [1, 2, ['hey!', 4]] >>> cop1 [1, 2, ['hey!', 4]] >>> cop2 [1, 2, [3, 4]] #把origin內的子list [3, 4] 改掉了一個元素,觀察 cop1 和 cop2

能夠看到 cop1,也就是 shallow copy 跟着 origin 改變了。而 cop2 ,也就是 deep copy 並無變。string

轉載出處:https://iaman.actor/blog/2016/04/17/copy-in-pythonclass

相關文章
相關標籤/搜索