以下代码(Python)出现了一些问题:
x = [0,0]
y = [[1,1],[2,2],[3,3]]
z = y
# z = [[1,1],[2,2],[3,3]]
print(y)
for i in range(0,len(z)):
if i == 0:
z[i] = x
else:
z[i] = y[i-1]
print(y)
y = z
print(y)
for i in range(0,len(z)):
if i == 0:
z[i] = x
else:
z[i] = y[i-1]
print(y)
我期望的输出是
[[1, 1], [2, 2], [3, 3]]
[[1, 1], [2, 2], [3, 3]]
[[0, 0], [1, 1], [2, 2]]
[[0, 0], [1, 1], [2, 2]]
但是我得到的是
[[1, 1], [2, 2], [3, 3]]
[[0, 0], [0, 0], [0, 0]]
[[0, 0], [0, 0], [0, 0]]
[[0, 0], [0, 0], [0, 0]]
当我改用我为z注释掉的行时,我得到了
[[1, 1], [2, 2], [3, 3]]
[[1, 1], [2, 2], [3, 3]]
[[0, 0], [1, 1], [2, 2]]
[[0, 0], [0, 0], [0, 0]]
为什么输出的行1&2和3&4总是不相同?据我所知,我没有做任何改变y的事情(y = z除外),而且我不明白为什么一开始使用z = y或z = [...]会有所作为。 / p>
答案 0 :(得分:2)
将此行z = y
更改为
from copy import deepcopy
z = deepcopy(y)
您的代码可以正常工作。
答案 1 :(得分:2)
因为z = y
设置z
指向与y
指向的对象相同的对象。如果随后您写z = [[1,1],[2,2],[3,3]]
,则z
不再指向与y
相同的对象,而是指向具有相同值的另一个对象。