python中“+ =”运算符的行为

时间:2014-01-27 12:03:26

标签: python

为什么以下代码的输出在python中有所不同,

>>> A = [1,2,3]  
>>> B = A  
>>> B += [4]  
>>> print A,B  
Output: A = [1,2,3,4] , B = [1,2,3,4]  

但如果我们将B += [4]替换为B = B + [4],则输出更改为:

>>> A = [1,2,3] , B = [1,2,3,4]

请解释。

1 个答案:

答案 0 :(得分:1)

+=是增加的补充;对于可变类型,它会改变对象到位

如果你这样做,你会得到同样的效果:

B.extend([4])

B分配给A不会创建副本,因此BA引用相同的对象,并且通过两个引用都可以看到对该对象的任何更改

但是,如果您使用B = B + [4],则会创建列表对象,并将B重新绑定到该新对象。由于创建了新的列表对象,原始列表对象(以前由B引用并仍由A引用)不受影响。

实际上,通过使用直接连接,您创建了原始列表对象的浅表副本。