1. 程式人生 > >Python 中 a+=b 和 a=a+b 的區別

Python 中 a+=b 和 a=a+b 的區別

兩者是有區別的,這種區別只出現在可變物件上。 

a+=b

  1. >>> a1=range(3)  # [0,1,2]
  2. >>> a2=a1
  3. >>> a2+=[3]   # +=呼叫__iadd__方法, 沒有該方法時,在呼叫__add__方法,a1.__iadd__([3]), 該方法在原物件a1上進行更新,該方法返回值為None
  4. >>> a1
  5. [0,1,2,3]    # a1變化
  6. >>> a2
  7. [0,1,2,3]    # a2 變化

a=a+b  

  1. >>> a1=range(3)
  2. >>> a2=a1
  3. >>> a2=a2+[3] # 呼叫__add__方法,a1=a1.__add__([3]), 該方法返回一個新的物件,原物件不修改,這裡a1被重新賦值,指向一個新的物件
  4. >>> a1
  5. [0,1,2]      # a1未變化
  6. >>> a2
  7. [0,1,2,3]   # a2 變化

兩者是有區別的,這種區別只出現在可變物件上

。因為對於不可變物件,根本沒有__iadd__方法,所以 +=和+的效果是一樣的,都呼叫__add__方法。