此问题在此处已有答案:
Why does foo.append(bar) affect all elements in a list of lists?(3个答案)
昨天关门了。
我正在尝试更新一个简单的蛇游戏的记录坐标列表。但是,当我尝试保存列表中的坐标时,它们都更新为最近的值。
我试过将坐标设置为更全局的尺度,而不是在类文件中,并复制我需要的数据,但是这些都不起作用。下面是一个简单的例子:
my_list = []
run = True
var1 = [5, 50]
i = 0
while run and i <= 10:
i += 1
my_list.append(var1)
var1[0] += 1
var1[1] -= 1
print(my_list)
我运行的是python 3.11.0。
1条答案
按热度按时间6vl6ewon1#
问题是每次将
var1
追加到my_list
时,都追加了对同一对象的引用。(即通过var1[0] += 1
),那么它对my_list
的所有元素都有影响,这就是Python处理列表的方式。您可以在other posts中阅读更多相关内容,或者在列表中查看一般的Python文档。在你的例子中,一个解决方案是在每次迭代中复制一个列表
var1
,并将这个副本附加到my_list
,在这种情况下,my_list
的所有元素将指向内存中的一个不同位置,这可以通过简单地调用.copy()
来实现: