python:a+=b 不等于a=a+b?
a+=b 调用的是__iadd__方法,但是a+b调用的是__add__方法。对于自定义的对象,我们通过覆盖两个方法来实现+=和+操作,但是基础数据类型呢?
a = [1,2,3] b = [1,2,3] def yyy(a): a = a+a def xxx(b): b+=b xxx(a) yyy(b) print(a,b) # [1, 2, 3, 1, 2, 3] [1, 2, 3]
a和b的结果是不同的
b+=b的方法改变了函数外面的全局变量,而a = a+b 并没有改变
我们都知道列表是可变数据类型,函数参数传递的是指针。
a = [1,2,3] def zzz(a): a.append(4) zzz(a) print(a) # [1,2,3,4]
在对函数内列表进行操作的时候同样会影响到外面。
所以可以推断列表的__iadd__方法在进行列表相加的时候调用了list.extend()方法
a = [1,2,3] b = [1,2,3] def zzz(a): a.extend(b) zzz(a) print(a)
而__add__方法则是return了结果并赋值给了作用域内的变量
所以对于可变数据类型,a+=b 不等于 a= a+b!