繁体   English   中英

python:更改列表的副本会更改原始副本吗?

[英]python: mutating the copy of a list changes the original?

所以直到现在,我一直以为假设,例如:

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]]

为什么在这种情况下两个列表都改变了?

切片是浅表副本。 通过切片创建的副本将包含对原始列表中旧元素的新引用; 如果原始列表包含可变对象(例如更多列表),则副本将包含对这些相同列表的引用。 您可以使用copy.deepcopy尝试解决此问题,或者循环浏览原始列表,然后将元素切片复制到新列表中。 不过要小心copy.deepcopy 您经常需要停止复制并保留原始元素的深度。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM