for 循环和追加的 Python 问题

r3z*_*3za 9 python for-loop append

我无法理解一段 python 代码的输出。

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

print(mani)
Run Code Online (Sandbox Code Playgroud)

输出是

[[0,1,2], [0,1,2], [0,1,2]] 
Run Code Online (Sandbox Code Playgroud)

我一生都无法理解为什么它不是

[[0], [0,1], [0,1,2]]
Run Code Online (Sandbox Code Playgroud)

非常感谢任何帮助。

小智 6

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

因此,随着尼玛的变化,玛尼中每个位置的参考都只是指向改变的尼玛。

由于 nima 最终为 [0, 1, 2],那么每个附加到 mani 中的引用都只是指同一个对象。

  • 因为列表是可变的,所以在创建后可以更改。:) (2认同)

Tom*_*hez 5

只是为了完成一些人的建议,您应该使用该copy模块。您的代码如下所示:

import copy

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

print(mani)
Run Code Online (Sandbox Code Playgroud)

输出:

[[0], [0, 1], [0, 1, 2]]
Run Code Online (Sandbox Code Playgroud)