python中的增量赋值

**

一,在python中a=a+b和a+=b有区别吗

**1,对可变的数据类型

a=[1,2,3]
print(id(a))    #1602469350792
b=[4,5]
a=a+b
print(a,id(a))      #[1, 2, 3, 4, 5] 1602469421512

a=[1,2,3]
print(id(a))    #1736417136008
b=[4,5]
a += b
print(a,id(a))  #[1, 2, 3, 4, 5] 1736417136008

对可变数据类型,a= a+b 和 a+=b 他们得到的新的列表的元素是一致的,但是他们的内存地址一个和原列表a的一致,一个不一致。

2,对不可变数据类型

a=(1,2,3)
print(id(a))    #2352934763832
b=(3,4)
a=a+b
print(a,id(a))      #(1, 2, 3, 3, 4) 2352934103616

a=(1,2,3)
print(id(a))    #2128999628088
b=(3,4)
a+=b
print(a,id(a))      #(1, 2, 3, 3, 4) 2128998967872

对不可变数据类型,a= a+b 和 a+=b 他们得到的新的列表的元素是一致的,他们的内存地址也都和原列表不一致。

二,出现这样的现象的原因

+=调用的是__iadd__方法,此方法是就地加法。
当类的内部有__iadd__方法的时候,遇到+=会优先调用此方法,没有的时候,会退而求其次,调用__add__方法。
对列表而言,a +=b就相当于a.extend(b)。

print("__iadd__" in dir(list))      #True
print("__add__" in dir(list))       #True
print("__iadd__" in dir(tuple))     #False
print("__add__" in dir(tuple))      #True
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值