Python多重赋值和引用

Ell*_*sky 3 python list variable-assignment

为什么多个赋值对int有明确的引用,而不是列表或其他对象?

>>> a = b = 1
>>> a += 1
>>> a is b
>>>     False
>>> a = b = [1]
>>> a.append(1)
>>> a is b
>>>     True
Run Code Online (Sandbox Code Playgroud)

shx*_*hx2 7

在整型例中,首先分配相同的对象到两个ab,但随后重新分配a与另一个对象(的结果a+1).a现在指的是一个不同的对象.

在列表例如,分配相同的对象既ab,但你没有做任何事情来改变这种状况.append仅更改列表对象的内部状态,而不是其标识.因此它们保持不变.

如果替换a.append(1)a = a + [1],则最终会得到不同的对象,因为再次分配一个新对象(结果a+[1])a.

请注意,a+=[1]行为会有所不同,但这是另一个问题.