首先直接上結論:—–我們尋常意義的複製就是深複製,即將被複製物件完全再複製一遍作為獨立的新個體單獨存在。所以改變原有被複製物件不會對已經複製出來的新物件產生影響。
—–而淺複製並不會產生乙個獨立的物件單獨存在,他只是將原有的資料塊打上乙個新標籤,所以當其中乙個標籤被改變的時候,資料塊就會發生變化,另乙個標籤也會隨之改變。這就和我們尋常意義上的複製有所不同了。
對於簡單的 object,用 shallow copy 和 deep copy 沒區別
複雜的 object, 如 list 中套著 list 的情況,shallow copy 中的 子list,並未從原 object 真的「獨立」出來。也就是說,如果你改變原 object 的子 list 中的乙個元素,你的 copy 就會跟著一起變。這跟我們直覺上對「複製」的理解不同。
看不懂文字沒關係我們來看**:
>>> 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 並沒有變。
**出處:
python中的copy模組理解
學習簡單而使用的copy模組 copy模組中只有兩個方法 copy.copy和copy.deepcopy,分別稱之為淺拷貝和深拷貝,以澡堂子為例來解釋。import copy 1.copy.copy a 1,2,3,x y a引用 租賃 使用 這個澡堂子的四個隔間 位址 其中 x y 是乙個包間,適...
Python學習 copy模組
在python中,對於物件的拷貝,分為淺拷貝 copy 與深拷貝 deepcopy 兩種方式。淺拷貝由操作符 完成,或者由copy模組中的copy方法完成,而深拷貝由copy模組中的deepcopy方法承擔。對於淺拷貝與深拷貝,如果拷貝物件都是不可變物件,則兩者沒有區別。如果拷貝物件是可變物件,則淺...
copy模組中的copy與deepcopy的區別
每空閒下來,就覺得以前寫的部落格很low.也許現在也很low 好吧就當公升級版的low吧 如果要了解copy與deepcopy的區別,就需要了解python的儲存機制 python在賦值會在記憶體裡開闢乙個空間來存放值這就叫 記憶體位址 同時會開闢乙個空間來存放名字叫命名,在資料相同長度在一定範圍 ...