序列的增量賦值 +=和*=

+=的實現是經過__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
相關文章
相關標籤/搜索