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__方法。
Python 中 x+=1 与 x=x+1 的区别_第1张图片

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

你可能感兴趣的:(Python 中 x+=1 与 x=x+1 的区别)