python – 更改原始对象时更改的对象列表

Python中,如果我写:

a = [1]
b = 3 * [a]
a.append(2)
print a, b

然后,输出是:

[1, 2] [[1, 2], [1, 2], [1, 2]]

但是,当我写:

a = [1]
b = 3 * a # notice the missing brackets here 
a.append(2)
print a, b

原来是:

[1, 2] [1, 1, 1]

这里发生了什么?

最佳答案
在第一个例子中,想一想Python对这个语句的作用:

b = 3 * [a]

它成为了:

b = [[a], [a], [a]]

因此,改变a将反映在b中,因为b由对象构成.

但是,在第二个示例中,您执行此操作:

b = 3 * a

这会创建列表a的副本,相当于:

b = [1, 1, 1]

因此,当追加到这个时候,没有任何改变.

转载注明原文:python – 更改原始对象时更改的对象列表 - 代码日志