考虑以下代码:
>>> 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
的表达式首先尝试调用 __iadd__
,如果失败,则在赋值后调用 __add__
(参见 Sven 的评论进行较小的更正)。因为 list
有 __iadd__
然后它做了一点点的变异魔法。
关于python - list.__iadd__ 和 list.__add__ 的不同行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9766387/