1. 程式人生 > 實用技巧 >python中a+=b 和a=a+b的結果一樣嗎

python中a+=b 和a=a+b的結果一樣嗎

這裡涉及到可變型別和不可變型別。

可變型別:列表,字典,集合

不可變:數字,字串,元祖

先看一下不可變型別的運算:

+=運算

>>> a, b = 1, 2
>>> a1 = a
>>> a += b
>>> a
3
>>> a1
1

=+運算

>>> a, b = 1, 2
>>> a1 = a
>>> a = a + b
>>> a
3
>>> a1
1

對不可變型別,a+=b 和a=a+b結果是一樣的

可變型別的運算:

+=運算

>>> a = [1,2,3,4]
>>> b = [5]
>>> a1 = a
>>> a += b
>>> a
[1, 2, 3, 4, 5]
>>> a1
[1, 2, 3, 4, 5]

=+運算

>>> a = [1,2,3,4]
>>> b = [5]
>>> a1 = a
>>> a = a + b
>>> a
[1, 2, 3, 4, 5]
>>> a1
[
1, 2, 3, 4]

可以看到a+=b和a=a+b返回結果不同。為什麼呢。

__add__和__iadd__的區別

  • __add__ 方法接收兩個引數,返回它們的和,兩個引數的值均不變。
  • __iadd__ 方法接收兩個引數,第一個引數的值改變

對可變型別使用加號操作(即a=a+b),呼叫__add__會返回一個新的物件,原來的物件不變。

a=a+b後a指向新的地址,但a1還是指向以前的地址

對可變型別使用加號操作(即a+=b),呼叫__iadd__,第一個引數的值改變,即a指向的本身內容發生改變,指向位置不發生改變。a變了a1也跟著變