在python中,为什么要把一个列表追加到一个更大的列表中,然后更新其中一个列表,同时更新所有其他追加的列表?

tquggr8v  于 2023-01-10  发布在  Python
关注(0)|答案(1)|浏览(139)

此问题在此处已有答案

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。

6vl6ewon

6vl6ewon1#

问题是每次将var1追加到my_list时,都追加了对同一对象的引用。(即通过var1[0] += 1),那么它对my_list的所有元素都有影响,这就是Python处理列表的方式。您可以在other posts中阅读更多相关内容,或者在列表中查看一般的Python文档。
在你的例子中,一个解决方案是在每次迭代中复制一个列表var1,并将这个副本附加到my_list,在这种情况下,my_list的所有元素将指向内存中的一个不同位置,这可以通过简单地调用.copy()来实现:

my_list = []
run = True
var1 = [5, 50]
i = 0
while run and i <= 10:
    i += 1
    my_list.append(var1.copy())
    var1[0] += 1
    var1[1] -= 1
print(my_list)

相关问题