提问者:小点点

for循环和append的Python问题


我很难理解一段python代码的输出。

mani=[]
nima=[]
for i in range(3)
    nima.append(i)
    mani.append(nima)

print(mani)

输出为

[[0,1,2], [0,1,2], [0,1,2]] 

我无论如何也不明白为什么不是

[[0], [0,1], [0,1,2]]

如有帮助,不胜感激。


共2个答案

匿名用户

因为当你把“尼玛”附加到“摩尼”中时,它不是“尼玛”的复制品,而是对“尼玛”的引用。

因此,当尼玛发生变化时,在mani中的每个位置处的引用都指向了变化后的尼玛。

由于nima以[0,1,2]结尾,所以附加到mani中的每个引用都只引用相同的对象。

匿名用户

正如一些人建议的那样,要完成此操作,您应该使用copy模块。 您的代码如下所示:

import copy

mani=[]
nima=[]
for i in range(3):
    nima.append(i)
    mani.append(copy.copy(nima))

print(mani)

输出:

[[0], [0, 1], [0, 1, 2]]