Python 中 a+=b 和 a=a+b 的区别有哪些

a+=b
/>>> a1 = range(3)
/>>> a2 = a1
/>>> a2 += [3]
/>>> a1
[0, 1, 2, 3]
/>>> a2
[0, 1, 2, 3]
a=a+b
/>>> a1 = range(3)
/>>> a2 = a1
/>>> a2 = a2 + [3]
/>>> a1
[0, 1, 2]
/>>> a2
[0, 1, 2, 3]
显然,两者是有区别的,而这种区别只出现在可变对象上(为什么是可变对象后面再说),是什么原因造成了两者的区别呢?
+= 操作调用 __iadd__方法,没有该方法时,再尝试调用__add__方法
a1 = [0, 1, 2]
a1 += [3]
/# 等价于
a1.iadd([3])
print(a1) #[0, 1, 2, 3]
__iadd__方法直接在原对象a1上进行更新,该方法的返回值为None
/+ 操作调用__add__方法
a1 = [0, 1, 2]
a1 = a1 + [3]
/# 等价于
a1 = a1.add([3])
__add__方法会返回一个新的对象,原对象不修改,因为这里 a1被重新赋值了,a1指向了一个新的对象,所以出现了文章开头a1不等于a2的情况
a1 = [0, 1, 2]
print(a1.add([3])) # [0, 1, 2, 3]
print(a1) # [0, 1, 2]

注:以上的斜杠都去掉!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值