在一个python项目上编写代码时,当我试图更改另一个列表中某个列表的值时,我注意到一个奇怪的行为
不工作代码:
lst = []
to_add = [None,None,None]
for i in range(3):
lst.append(to_add)
for i in range(3):
lst[i][0] = anotherslistoflists[i][0]
令我惊讶的是,这个例子产生了意想不到的结果。具体来说,每个lst[i][0]都被赋予了相同的值,该值是“anotherlistoflists”列表最后一个索引中的第一个元素
结果示例(打印lst时)
("word1",None,None)
("word1",None,None)
("word1",None,None)
工作代码:
lst = []
for i in range(5):
lst.append([None,None,None])
# same code as above
结果示例2(预期结果)
("word1",None,None)
("word2",None,None)
("word3",None,None)
当然,正如您所看到的,问题已经解决了,但是我想知道为什么第一个代码不起作用。“添加”列表可能有问题,但我不明白这里有什么问题
您将同一列表} 函数:
to_add
追加三次。然后,一旦修改它,指向它的所有三个项目都将反映相同的更改。如果要创建具有相同值的新副本,可以使用内置的^{您正在将相同的列表
to_add
添加到lst
:在第一种情况下,您并不是在添加
add_to_list
的副本,而是在一次又一次地添加确切的列表,因此当您稍后更改它时,您正在更改真正的add_to_list
以及引用它的任何地方。在第二种情况下,每次添加一个包含None
的新列表,每次修改不同的列表相关问题 更多 >
编程相关推荐