python中a+=b 和a=a+b的結果一樣嗎
阿新 • • 發佈:2020-09-19
這裡涉及到可變型別和不可變型別。
可變型別:列表,字典,集合
不可變:數字,字串,元祖
先看一下不可變型別的運算:
+=運算
>>> 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也跟著變