list .__ iadd__和list .__ add__的不同行为

考虑下面的代码:

>>> x = y = [1, 2, 3, 4] >>> x += [4] >>> x [1, 2, 3, 4, 4] >>> y [1, 2, 3, 4, 4] 

然后考虑这个:

 >>> x = y = [1, 2, 3, 4] >>> x = x + [4] >>> x [1, 2, 3, 4, 4] >>> y [1, 2, 3, 4] 

这两个为什么有差别?

(是的,我试图寻找这个)。

__iadd__改变列表,而__add__返回一个新的列表,如演示。

x += y的expression式首先尝试调用__iadd__ ,否则,调用__add__后跟一个赋值(参见Sven的小调整的评论)。 由于list__iadd__所以它有点突变魔术。

第一个变更列表,第二个变更名称。