+=的实现是经过__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