**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