添加到Python 2.7中的列表

sti*_*oob 6 python python-2.7

>>> A = [1,2,3,4]
>>> D = A
>>> D
[1, 2, 3, 4]
>>> D = D + [5]
>>> A
[1, 2, 3, 4]
>>> C = A
>>> C += [5]
>>> A
[1, 2, 3, 4, 5]
Run Code Online (Sandbox Code Playgroud)

为什么C += [5]修改AD = D + [5]不修改?

是否有任何区别=,并+=在Python或在这个意义上任何其他的语言吗?

Nho*_*hor 2

事实上是的。当您使用时,+=您仍然引用同一个对象,但是+您正在创建一个新对象,并且=您将引用重新分配给该新创建的对象。这在处理函数参数时尤其重要。感谢@Amadan 和@Peter Wood 的澄清。

  • 创建新对象的不是“=”,而是“+”。`D = D + [5]` 调用 `D = D.__add__([5])`;`C += [5]` 调用 `C.__iadd__([5])`。`__add__` 创建一个新对象,`__iadd__` 则不会;`=` 只是分配引用。 (2认同)