将列表追加到列表以创建列表列表会导致想要使用列表列表的索引更改值时出现问题:python



基本上,当使用list.append()将一个列表添加到另一个列表时,似乎存在一个问题。问题是,整个列被更改为您为给定的索引设置的值。例如下面的代码

b = [1,1,1]
c = []
c.append(b)
c.append(b)
c.append(b)
c[0][0] = 4

,如果你输出c,你会得到:[[4 1 1] [4 1 1] [4 1 1]]而不是[[4 1 1] [1, 1, 1] [1, 1, 1]]

所以我的问题是,你怎么才能最终把列表放在右边,而不是实际发生的事情

你所观察到的是Python中正常和预期的行为,任何像样的教程都应该涵盖它。

c.append(b)
c.append(b)
c.append(b)

c上追加三个对列表b的引用。因为它是相同的列表,改变一个引用会改变它被引用的所有四个地方,顺便说一下,包括b

如果你不想要这个行为,复制列表。

c.append(b[:])
c.append(b[:])
c.append(b[:])

每次添加一个新的列表:

b = [1,1,1]
c = []
c.append(list(b))
c.append(list(b))
c.append(list(b))
c[0][0] = 4

您遇到问题的原因是因为列表存储为引用到实际列表对象-因此您的c版本有相同引用的3个副本,所有指向相同的实际[1,1,1]对象。使用list()函数创建新的副本,以便引用指向不同的对象。

相关内容

  • 没有找到相关文章