为什么以下代码的输出在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]
请解释。
答案 0 :(得分:1)
+=
是增加的补充;对于可变类型,它会改变对象到位。
如果你这样做,你会得到同样的效果:
B.extend([4])
将B
分配给A
不会创建副本,因此B
和A
引用相同的对象,并且通过两个引用都可以看到对该对象的任何更改
但是,如果您使用B = B + [4]
,则会创建新列表对象,并将B
重新绑定到该新对象。由于创建了新的列表对象,原始列表对象(以前由B
引用并仍由A
引用)不受影响。
实际上,通过使用直接连接,您创建了原始列表对象的浅表副本。