Python附加vs列表+;列表

Python附加vs列表+;列表,python,append,Python,Append,我读了,这是一个类似的问题,但我的问题更多的是关于下面的代码 a = [[]] * 4 b = [[]] * 4 a[3] = a[3] + [1] b[3].append(1) print a, b 其中: [[],[],[],[1]] [[1],[1],[1],[1]] 为什么这两个会有什么不同?我从来没有遇到过这样的例子,这两种方法有不同的输出 谢谢a[3]=a[3]+[1]没有修改a[3]。相反,它在那里放置了一个新项目a[3]+[1]创建一个类似于a[3]的列表,只是在末尾有一个额

我读了,这是一个类似的问题,但我的问题更多的是关于下面的代码

a = [[]] * 4
b = [[]] * 4
a[3] = a[3] + [1]
b[3].append(1)
print a, b
其中:

[[],[],[],[1]] [[1],[1],[1],[1]]
为什么这两个会有什么不同?我从来没有遇到过这样的例子,这两种方法有不同的输出


谢谢

a[3]=a[3]+[1]
没有修改
a[3]
。相反,它在那里放置了一个新项目
a[3]+[1]
创建一个类似于
a[3]
的列表,只是在末尾有一个额外的列表。然后,
a[3]=…
将索引
3
处的
a
设置为该新列表


b[3].append(1)
访问
b[3]
并使用其
.append()
方法。
.append()
方法对列表本身起作用,并在列表末尾放置一个。由于
[[]]*4
创建了一个包含另一个列表四个副本的列表,因此
.append()
方法显示了它在
b
的所有项中的更改
a[3]=a[3]+[1]
没有修改
a[3]
。相反,它在那里放置了一个新项目
a[3]+[1]
创建一个类似于
a[3]
的列表,只是在末尾有一个额外的列表。然后,
a[3]=…
将索引
3
处的
a
设置为该新列表

b[3].append(1)
访问
b[3]
并使用其
.append()
方法。
.append()
方法对列表本身起作用,并在列表末尾放置一个。由于
[[]]*4
创建了一个包含另一个列表四个副本的列表,因此
.append()
方法显示了它在
b

的所有项目中的更改创建与修改之间可能存在重大差异创建与修改之间可能存在重大差异