所以直到现在,我还是假设你有例如:
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]]
为什么在这种情况下,两个列表都改变了?
答案 0 :(得分:5)
切片是浅色副本。切片创建的副本将包含对原始列表的旧元素的新引用;如果原始列表包含可变对象(如更多列表),则副本将包含对这些列表的引用。您可以使用copy.deepcopy
尝试解决此问题,或循环浏览原始列表并将元素切片复制到新列表中。但是要小心copy.deepcopy
;通常会有一些深度,你想停止制作副本并保留原始元素。