增量賦值運算子 += 和 *= 的表現取決於它們第乙個的操作物件。
例如 +=:
+= 背後的特殊方法是__iadd__()(用於就地加法)。但是如果乙個序列沒有實現這個方法,python會退一步呼叫__add__。
以 a += b為例:
如果a實現了__iadd__方法,就會呼叫這個方法。同時對於可變序列(例如list)來說,a就會就地改動,就行呼叫了a.extend(b)一樣。但是沒有實現__iadd__的話, a += b這個表示式就和a = a+b一樣。首先計算a+b,得到乙個新的物件,然後賦值給a。也就是說,這個表示式中,變數名會不會被關聯到新的物件,完全取決於這個型別是否實現了__iadd__方法。
總體來說,可變序列都實現了__iadd__方法,因此+=是就地加法。而不可變序列根本不支援這個操作,對於這個方法的實現就無從說起。
用具體的例子,可能更好理解:
#可變序列
li=[1,2,3]
print(id(li))
li += [4,5]
print(id(li))
#輸出結果為:
2351369551048
2351369551048
##不可變序列
tup = (1,2,3)
print(id(tup))
tup *=2
print(id(tup))
輸出結果為:
1568666754216
1568666610184
分析序列的增量賦值 ,
如 對於可變序列,如list,bytearrary和array.aray 實現了 iadd imul 就地運算 增量運算後,新元素追加到可變序列後,該序列的id不變 對於不可變序列,沒有實現上述方法,就需要建立個新物件,然後賦值,如a b,相當於a a b 例子 l 1,2,3 id l 47410...
python中的增量賦值
1,對可變的資料型別 a 1,2,3 print id a 1602469350792 b 4,5 a a b print a,id a 1,2,3,4,5 1602469421512 a 1,2,3 print id a 1736417136008 b 4,5 a b print a,id a 1...
Python學習筆記 序列賦值
python 程式設計師會預設序列是支援 和 操作的。通常 號兩側的序列由相同型別的資料所 構成,在拼接的過程中,兩個被操作的序列都不會被修改,python 會新建乙個包含同樣類 型資料的序列來作為拼接的結果。如果想要把乙個序列複製幾份然後再拼接起來,更快捷的做法是把這個序列乘以乙個整 數。同樣,這...