在python中修改列表时出错

时间:2016-08-11 22:50:37

标签: python list

我在尝试更改嵌套列表中的特定项时遇到了问题。我编写的代码是在python 2.7中。 这就是我写的:

list_1 = []
list_2 = []
infin = 25
while infin != 0:
    list_1.append((0,0,0))
    infin = infin - 1
infin = 5
while infin != 0:
    list_2.append(list_1)
    infin = infin - 1

基本上它会生成一个如下所示的列表:

  

[[ 25元组],[ 25元组],[ 25元组],[ 25元组 ],[ 25元组]]

然后当我尝试通过这样做修改列表时:

list_2[0][0] = (1,1,1)

每个包含25个元组的列表在开始时都会有(1,1,1),而不仅仅是第一个。为什么?

3 个答案:

答案 0 :(得分:2)

因为您要追加相同的列表list_1 5次。您在list_1中更改的内容将被打印5次,因为该列表已添加5次。 如果您想要新列表,请使用:

list(list_1)

答案 1 :(得分:1)

您实际上并未实际添加不同的列表实例,而是重复添加对同一列表的引用。使用列表来避免这种情况。

list_1 = []
list_2 = []
infin = 25
while infin != 0:
    list_1.append((0,0,0))
    infin = infin - 1
infin = 5
while infin != 0:
    list_2.append(list(list_1))
    infin = infin - 1

答案 2 :(得分:1)

list_1是一个对象。然后将对象添加到另一个列表5次,不创建对象的5个副本,而是创建5个对同一对象的引用。

您需要在创建第二个列表时复制列表:

infin = 5
while infin != 0:
    list_2.append(list(list_1))
    infin = infin - 1