可能的重复:
Python 中的加等于 (+=) 有何作用? https://stackoverflow.com/questions/2347265/what-does-plus-equals-do-in-python
我注意到一个奇怪的问题:
l1 = ['1', '2', '3']
l2 = l1
item = l2.pop(0)
# the pop operation will effect l1
print l1
l2 = l2 + [item]
# why "l2 = l2 + [item]" does't effect l1 while "l2 += [item]" does.
print l2
print l1
输出是:
['2', '3']
['2', '3', '1']
['2', '3']
但如果我改变l2 = l2 + [item]
into l2 += [item]
,输出将是:
['2', '3']
['2', '3', '1']
['2', '3', '1']
+
and +=
如所描述的,不同的运算符具有不同的内部含义here http://docs.python.org/2/reference/datamodel.html#emulating-numeric-types.
l2 = l1 + x
calls l2 = l1.__add__(x)
,如果这不起作用,它会调用x.__radd__(l1)
。两者都应该返回一个形成操作结果的新对象,独立于旧对象,因此不会影响l1
.
l2 += x
calls l2 = l2.__iadd__(x)
(“增强作业”),并且只有当这不起作用时,才会回退到l2 = l2 + x
如上所述。
对于数字,两者是相同的,因为它们是不可变的,因此不能用+=
,在列表中时,+
返回一个新对象,同时+=
修改左侧的。
作为后面的对象l2
被修改并且l1
引用同一个对象,您会注意到变化l1
以及。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)