for循环和附加的Python问题

时间:2020-06-20 14:28:44

标签: python for-loop append

我无法理解一段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]]

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:6)

这是因为当您将nima附加到mani中时,它不是nima的副本,而是对nima的引用。

因此,随着nima的变化,在mani中每个位置的引用都指向更改后的nima。

由于nima的结尾为[0,1,2],因此每个附加到mani的引用仅引用同一对象。

答案 1 :(得分:5)

根据某些建议,您应该使用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]]

答案 2 :(得分:1)

列表是可变的(可变序列在创建后可以更改),您可以看到您正在使用id函数对同一对象进行操作:

for i in mani:
    print(id(i))