python中a%b_Python中的a+=b和a=a+b之间的区别是什么?

我一直以为a+=b和a=a+b是一样的,毕竟效果是一样的嘛。后来我发现并不是这么回事?我发现当变量是不可变对象时,a+=b和a=a+b是一样的,不过我注意到了前后两个a已经不是同一个对象了。而当变量是可变对象时,虽然a+=b和a=a+b的效果是一样的,但是a=a+b前后的两个a也不是同一个对象了,而a+=b前后两个a还是同一个对象。

# 不可变对象

# a+=b 前后的a不是同一个对象

>>> a=1

>>> b=2

>>> id(a)

140722530604704

>>> a+=b

>>> id(a)

140722530604768

>>> print(a)

3

# a=a+b 前后的a也不是同一个对象

>>> a=1

>>> b=2

>>> id(a)

140722530604704

>>> a=a+b

>>> id(a)

140722530604768

>>> print(a)

3

# 可变对象

# a+=b 前后的a是同一个对象

>>> a=[1,2]

>>> b=[3,4]

>>> id(a)

214391266944

>>> a+=b

>>> id(a)

214391266944

>>> print(a)

[1, 2, 3, 4]

# a=a+b 前后的a不是同一个对象

>>> a=[1,2]

>>> b=[3,4]

>>> id(a)

2143494790272

>>> a=a+b

>>> id(a)

2143494790592

>>> print(a)

[1, 2, 3, 4]

这是怎么回事呢?看了一下各位大佬写的文章,总算是弄明白了一些。

+操作调用的是__add__方法

__add__方法会返回一个新的对象,原对象不修改。

+=操作调用了__iadd__方法

__iadd__方法直接在原对象上进行更新,该方法的返回值为None。

没有该方法时,再尝试调用__add__方法。

不可变对象只有__add__方法,没有__iadd__

可变对象有__add__方法,也有__iadd__

结论

当变量是不可变对象时,a+=b和a=a+b调用的都是__add__方法,返回的是一个新对象

当变量是可变对象时,a+=b调用的是__iadd__方法,直接在原对象上进行更新;a=a+b调用的是__add__方法,返回一个新对象

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值