for循环和append的Python问题

2024-04-16 14:57:21 发布

您现在位置: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]]

非常感谢您的帮助


Tags: 代码inforrangeprintappendmaninima
3条回答

这是因为当你把尼玛附加到mani中时,它不是尼玛的副本,而是对尼玛的引用

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

由于nima最终为[0,1,2],因此附加到mani中的每个引用只引用同一个对象

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

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

正如一些人所建议的那样,您应该使用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]]

相关问题 更多 >