为什么多重赋值为int而不是列表或其他对象提供不同的引用?
>>> a = b = 1 >>> a += 1 >>> a is b >>> False >>> a = b = [1] >>> a.append(1) >>> a is b >>> True
在int示例中,您首先将a和分配了相同的对象b,然后a使用另一个对象(的结果a+1)重新分配。a现在指的是另一个对象。
a
b
a+1
在列表示例中,您为a和分配了相同的对象b,但是您并没有做任何更改。append仅更改列表对象的内部状态,而不更改其标识。因此,它们保持不变。
append
如果替换a.append(1)为a = a + [1],则最终会得到不同的对象,因为再次需要为分配一个新对象(的结果a+[1])a。
a.append(1)
a = a + [1]
a+[1]
请注意,这a+=[1]会有所不同,但这是另一个问题。
a+=[1]