即使使用深度复制,列表也会被修改

时间:2014-11-15 21:41:04

标签: python

我在使用Python尝试制作的某个程序中复制列表时遇到问题。

所以基本上这就是我遇到问题的路线:

print(a)
print(b)
a[0]=deepcopy(b[0][-1][0][:1])
print(b)

(打印件仅用于调试目的,以便我可以看到这些列表是如何修改的) 这是印刷品显示的内容:

[[1, 2, 3, 5], [0, 5, 9, 10]]
[[[[1, 2, 3, 5], [0, 5, 9, 10]]]]
[[[[1], [0, 5, 9, 10]]]]

所以问题是“b”实际上已被修改,虽然我使用了它的“深度复制”,这对我来说完全没有意义。 这只发生在我的代码中,因为如果你试图运行相同的代码行(通过将“a”和“b”分配给之前的印刷品所显示的内容),它实际上不会修改“b” 。 所以我的问题是什么可能导致列表被“深度复制”时被修改?我没有整个程序,因为它有点长,而且它的所有名称和注释都是法语,所以我只是要求一个通用的答案,可以帮助我理解为什么会发生这种情况。 我希望我的解释足够清楚。请告诉我他们是不是,我会试着更好地解释=)。 谢谢。

1 个答案:

答案 0 :(得分:0)

可能你有这个结构:

a = [[1, 2, 3, 5], [0, 5, 9, 10]]
b = [[a]]

如果您使用副本设置列表元素,则不会更改a的列表,这是无关紧要的。

a[0] = [1] # b[0][-1][0][:1]

所以现在a

a = [[1], [0, 5, 9, 10]]

b是您打印的内容。