值在python中使用append()覆盖以前的值

值在python中使用append()覆盖以前的值,python,Python,我试图使用append函数创建一个嵌套列表,但最后一个值将恢复以前的值,任何人都可以告诉我原因以及如何正确执行。 谢谢 输出显示: [4,0,0],[4,0,0],[4,0,0],[4,0,0]] 但我想要的结果是 [1,0,0],[2,0,0],[3,0,0],[4,0,0]] 您的结果列表是[temp,temp,temp,temp]。如果希望对象不同,每次都必须创建一个新的子列表。一个简单的方法是使用列表理解 d = [[i, 0, 0] for i in range(1, 5)] 试试这

我试图使用append函数创建一个嵌套列表,但最后一个值将恢复以前的值,任何人都可以告诉我原因以及如何正确执行。 谢谢

输出显示:

[4,0,0],[4,0,0],[4,0,0],[4,0,0]]

但我想要的结果是

[1,0,0],[2,0,0],[3,0,0],[4,0,0]]


您的结果列表是
[temp,temp,temp,temp]
。如果希望对象不同,每次都必须创建一个新的子列表。一个简单的方法是使用列表理解

d = [[i, 0, 0] for i in range(1, 5)]
试试这个:

d= []
temp = [0,0,0]
for i in range(4):
   tmp = [t for t in temp]
   tmp[0] = i+1
   d.append(tmp)

或者,使用OP的代码,只需将
d.append(temp)
更改为
d.append(temp[:])
,每次使用“空切片”插入
temp
的浅拷贝,而不是另一个别名。您对列表的理解速度更快、更清晰,浅层复制只是最简单的解决方法。非常感谢您的回答。
[t for t in temp]
是一种相当冗长/缓慢的方式来表达
temp[:]
。如果输入可能不是
列表
,而输出必须是
列表
列表(someseq)
,则无操作列表总是比空片更好。非常感谢欢迎您
d= []
temp = [0,0,0]
for i in range(4):
   tmp = [t for t in temp]
   tmp[0] = i+1
   d.append(tmp)