After E0_copy = list(E0)
, I guess E0_copy
is a deep copy of E0
since id(E0)
is not equal to id(E0_copy)
.然后我在循环中修改了 E0_copy
,但是为什么之后 E0
不一样呢?
E0 = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
for k in range(3):
E0_copy = list(E0)
E0_copy[k][k] = 0
#print(E0_copy)
print E0 # -> [[0, 2, 3], [4, 0, 6], [7, 8, 0]]
原文由 Shen 发布,翻译遵循 CC BY-SA 4.0 许可协议
E0_copy
不是深拷贝。您不会使用list()
进行深层复制。 (list(...)
和testList[:]
都是浅拷贝。)您使用
copy.deepcopy(...)
深度复制列表。请参阅以下片段 -
现在看到
deepcopy
操作解释一下,
list(...)
不会递归地复制内部对象。它只复制最外层列表,同时仍然引用相同的内部列表,因此,当您改变内部列表时,更改会反映在原始列表和浅表副本中。通过检查id(a[0]) == id(b[0])
whereb = list(a)
可以看到浅复制引用了内部列表。