+和+ =运算符不同?

oob*_*boo 4 python list operators

>>> c = [1, 2, 3]
>>> print(c, id(c))
[1, 2, 3] 43955984
>>> c += c
>>> print(c, id(c))
[1, 2, 3, 1, 2, 3] 43955984
>>> del c
>>> c = [1, 2, 3]
>>> print(c, id(c))
[1, 2, 3] 44023976
>>> c = c + c
>>> print(c, id(c))
[1, 2, 3, 1, 2, 3] 26564048
Run Code Online (Sandbox Code Playgroud)

有什么不同?是+ =和+不应该仅仅是语法糖?

Sil*_*ost 13

docs很好地解释了,我想:

__iadd__()等.
调用这些方法来实现增强算术赋值(+=, -=, *=, /=, //=, %=, **=, <<=, >>=, &=, ^=, |=).这些方法应该尝试就地进行操作(修改self)并返回结果(可能是,但不一定是这样self).如果未定义特定方法,则扩充分配将回退到常规方法.例如,要执行语句x += y,调用x具有__iadd__() 方法的类的实例x.__iadd__(y).

+=旨在实现就地修改.在简单添加的情况下,创建新对象并使用已使用的name(c)标记它.

此外,您会注意到,+=由于列表的可变性,操作符的这种行为才有可能.整数 - 不可变类型 - 不会产生相同的结果:

>>> c = 3
>>> print(c, id(c))
3 505389080
>>> c += c
>>> print(c, id(c))
6 505389128
Run Code Online (Sandbox Code Playgroud)