我看了Python list + list vs. list.append(),这是一个类似的问题,但我的问题更多与下面的代码有关
a = [[]] * 4
b = [[]] * 4
a[3] = a[3] + [1]
b[3].append(1)
print a, b
给出了:
[[],[],[],[1]] [[1],[1],[1],[1]]
为什么这两个会有所不同?我从来没有碰到这样的例子,这两种方法有不同的输出......
由于
答案 0 :(得分:2)
a[3] = a[3] + [1]
未修改a[3]
。相反,它在那里放了一个新项目。 a[3] + [1]
创建一个与a[3]
类似的列表,但最后会有一个额外的列表。然后,a[3] = ...
将索引a
的{{1}}设置为该新列表。
3
访问b[3].append(1)
并使用其b[3]
方法。 .append()
方法适用于列表本身,并在列表的末尾放置一个。由于.append()
创建的列表包含另一个列表的四个副本,因此[[]] * 4
方法会在.append()
的所有项目中显示其更改。