+=的實現是經過__iadd__實現的,若是類中沒有實現__iadd__方法,那麼就會調用__add__方法;python
可變序列:調用的是__iadd__方法;spa
不可變序列:調用的是__add__方法;對象
+和*操做都會先建立新的對象,而後作拼接操做;blog
__iadd__不會建立新的序列,而是在原來的序列上作增量操做;資源
不可變序列不會調用__iadd__方法,因此必然會建立新的序列,形成資源的浪費,因此不可變序列使用+=和 +操做效果是相同的(str除外);class
l = [1,2,3] print(id(l)) l *= 2 print(l) print(id(l)) t = (1,2,3) print(id(t)) t *= 2 print(id(t)) 17505976 [1, 2, 3, 1, 2, 3] 17505976 17269984 17085080