我无法理解一段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]]
非常感谢任何帮助。
答案 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))