python:a+=b 和a=a+b? 基础数据类型也不能乱用

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!  

原文地址:https://www.cnblogs.com/yxi-liu/p/8536559.html