2013-12-10 38 views
2

所以到現在爲止,我還是假設下,如果你有,例如:python:突變列表的副本更改原來的?

L = [1,2,3] 
L2 = L1 
L2.append(5) 

L和L2將被追加代碼的影響。

然而,當你將L2是一個列表的副本,例如:

L = [1,2,3] 
L2 = L[:] 
L2.append(5) 

只L2會受到影響,和L仍是指[1,2,3]

但我現在碰到這個:

x = [1, 2] 
L1 = [x, [8, 9]] 
L2 = L1[:] 
L2[0][1] = 999 

>>>print(L1) 
[[1,999],[8,9]] 
>>>print(L2) 
[[1,999],[8,9]] 

爲什麼在這種情況下,這兩個列表都改變了?

回答

5

切片是淺拷貝。通過切片創建的副本將包含對原始列表的舊元素的新引用;如果原始列表包含更多列表等可變對象,則副本將包含對這些列表的引用。您可以使用copy.deepcopy嘗試解決此問題,或者循環訪問您的原始列表並將這些元素分片複製到新列表中。儘管如此,請注意copy.deepcopy;通常有一些深度要停止製作副本並保留原始元素。

相關問題