2013-06-01 81 views
0

python中的copy.copy和copy.deepcopy函數有什麼不同?在python中複製函數

>>> copy.deepcopy(li) 
[1, 2, 3, 4] 

>>> copy.copy(li) 
[1, 2, 3, 4] 

都做同樣的事情,誰能告訴一下這些功能不明確

+1

http://docs.python.org/2/library/copy.html –

回答

3

copy.copy執行,而不是copy.deepcopy執行深拷貝淺拷貝。

當考慮:

li = [1, 2, 3, 4] 

你不會注意到任何區別,因爲你要複製一個不可改變的對象,但是考慮:

>>> import copy 
>>> x = copy.copy(li) 
>>> x 
[[1, 2], [3, 4]] 
>>> x[0][0] = 9 
>>> li 
[[9, 2], [3, 4]] 

由於淺副本將只在每個參考的副本列表中,操縱這些複製的引用仍然會影響原始列表。

但是下面的代碼:

>>> x.append(1) 

將有原來的名單上沒有任何影響。

3
>>> import copy 
>>> L = [[1,2,3]] 
>>> A = copy.copy(L) 
>>> A[0].append(4) 
>>> A 
[[1, 2, 3, 4]] 
>>> L 
[[1, 2, 3, 4]] 
>>> L = [[1,2,3]] 
>>> A = copy.deepcopy(L) 
>>> A[0].append(4) 
>>> A 
[[1, 2, 3, 4]] 
>>> L 
[[1, 2, 3]]