Python序列的增量賦值 和

2021-09-29 13:34:33 字數 764 閱讀 1441

增量賦值運算子 += 和 *= 的表現取決於它們第乙個的操作物件。

例如 +=:

+= 背後的特殊方法是__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 會新建乙個包含同樣類 型資料的序列來作為拼接的結果。如果想要把乙個序列複製幾份然後再拼接起來,更快捷的做法是把這個序列乘以乙個整 數。同樣,這...