**python
**1,對可變的數據類型web
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, 2, 3, 4, 5] 1736417136008
對可變數據類型,a= a+b 和 a+=b 他們獲得的新的列表的元素是一致的,可是他們的內存地址一個和原列表a的一致,一個不一致。svg
2,對不可變數據類型code
a=(1,2,3) print(id(a)) #2352934763832 b=(3,4) a=a+b print(a,id(a)) #(1, 2, 3, 3, 4) 2352934103616 a=(1,2,3) print(id(a)) #2128999628088 b=(3,4) a+=b print(a,id(a)) #(1, 2, 3, 3, 4) 2128998967872
對不可變數據類型,a= a+b 和 a+=b 他們獲得的新的列表的元素是一致的,他們的內存地址也都和原列表不一致。xml
+=調用的是__iadd__方法,此方法是就地加法。
當類的內部有__iadd__方法的時候,遇到+=會優先調用此方法,沒有的時候,會退而求其次,調用__add__方法。
對列表而言,a +=b就至關於a.extend(b)。內存
print("__iadd__" in dir(list)) #True print("__add__" in dir(list)) #True print("__iadd__" in dir(tuple)) #False print("__add__" in dir(tuple)) #True