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
有什么不同?是+ =和+不应该仅仅是语法糖?
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
| 归档时间: | 
 | 
| 查看次数: | 457 次 | 
| 最近记录: |