对于加法
+=
操作首先会尝试调用对象的 __ iadd__
方法,如果没有该方法,那么才会尝试调用__add__
方法。
换言之,
- 对于
+
号操作,可变对象和不可变对象调用的都是__add__
操作; - 对于
+=
号操作,可变对象调用__add__
,不可变对象调用的是__iadd__
(不可变对象没有__iadd__
)。__iadd__
是原地修改。
>>> a1 = a2 = [1, 2]
>>> b1 = b2 = [1, 2]
>>> a1 += [3] # Uses __iadd__, modifies a1 in-place
>>> b1 = b1 + [3] # Uses __add__, creates new list, assigns it to b1
>>> a2
[1, 2, 3] # a1 and a2 are still the same list
>>> b2
[1, 2] # whereas only b1 was changed
对于乘法
a=[20,22]
s=a
s*=2
print('a={0},s={1}'.format(a,s))
print(id(a),id(s))
# a=[20, 22, 20, 22],s=[20, 22, 20, 22]
# 2386940326144 2386940326144
s=s*2
print('a={0},s={1}'.format(a,s))
print(id(a),id(s))
# a=[20, 22, 20, 22],s=[20, 22, 20, 22, 20, 22, 20, 22]
# 2386940326144 2386940328896
发表您的看法