Python 中 x+=1 与 x=x+1 的区别

一、可变对象与不可变对象

不可变对象的值永远是刚开始创建的值,对该对象做的任何操作都会导致一个新对象的创建。常见的不可变对象有:int、tuple、set、str。

>>> a = 1
>>> id(a)
1659553456
>>> a += 1
>>> id(a)
1659553488

可变对象的值可以通过某些操作动态的改变,将可变对象赋给另一个变量时,两个变量共享同一个实例对象。

>>> x = [0, 1]
>>> y = x
>>> id(x)
2433918795592
>>> id(y)
2433918795592
>>> y.append(3)
>>> x
[0, 1, 3]
>>> y
[0, 1, 3]
>>> id(x)
2433918795592
>>> id(y)
2433918795592
二、__add__与__iadd__

+操作调用__add__方法;+=操作优先调用__iadd__方法,没有时才调用__add__方法。

  • __add__方法接收两个参数,返回他们的和,但两个参数本身不改变。
  • __iadd__方法将第二个参数加到第一个参数上,不可变对象显然没有__iadd__方法。

因此对可变对象来说,这两种表达式是不同的,会导致原本指向同样内存地址的两个变量,其中一个执行操作后内容变得不一致,实质上已经不是相同的对象示例了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容