背景图
对Python增量赋值的理解

对于加法

+=操作首先会尝试调用对象的 __ 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

参考链接


本文来源互联网, 版权归原作者所有。内容仅代表原作者个人观点。如遇版权等问题,请联系本网

发表您的看法

加载失败,请刷新页面。若该问题持续出现,则可能是评论区被禁用。