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__
所以它有点突变魔术。
第一个变更列表,第二个变更名称。