Python 表达式 i += x 与 i = i + x 等价吗?
Python 表达式 i += x 与 i = i + x 等价吗?
看个例子
a = [1, 2, 3]
b = a
# 写法一
b += [4]
# 写法二
# b = b + [4]
print(id(a), a)
print(id(b), b)
两种不同的写法,结果不一致
-
写法一结果:
2305441971976 [1, 2, 3, 4] 2305441971976 [1, 2, 3, 4]
-
写法二结果
2113739341576 [1, 2, 3] 2113739385672 [1, 2, 3, 4]
解释
+=
操作首先会尝试调用对象的 __iadd__
方法,如果没有该方法,那么尝试调用__add__
方法,先来看看这两个方法有什么区别
-
add 方法接收两个参数,返回它们的和,两个参数的值均不会改变。
-
iadd 方法同样接收两个参数,但它是属于 in-place 操作,就是说它会改变第一个参数的值,因为这需要对象是
可变的
,所以对于不可变对象没有__iadd__方法。>>> hasattr(int, '__iadd__') False >>> hasattr(list, '__iadd__') True
因此对于可变对象(列表,字典等)进行 +=
操作时,会存在潜在的bug
你要是觉得写的还不错,就点个关注,可以评论区留下足迹,以后方便查看.
你要是觉得写的很辣鸡,评论区欢迎来对线!
欢迎转载!