Python中的a+=b和a=a+b之間的區別是什么?


我一直以為a+=b和a=a+b是一樣的,畢竟效果是一樣的嘛。后來我發現並不是這么回事?我發現當變量是不可變對象時,a+=b和a=a+b是一樣的,不過我注意到了前后兩個a已經不是同一個對象了。而當變量是可變對象時,雖然a+=b和a=a+b的效果是一樣的,但是a=a+b前后的兩個a也不是同一個對象了,而a+=b前后兩個a還是同一個對象。

# 不可變對象
# a+=b 前后的a不是同一個對象
>>> a=1
>>> b=2
>>> id(a)
140722530604704
>>> a+=b
>>> id(a)
140722530604768
>>> print(a)
3
# a=a+b 前后的a也不是同一個對象
>>> a=1
>>> b=2
>>> id(a)
140722530604704
>>> a=a+b
>>> id(a)
140722530604768
>>> print(a)
3
# 可變對象
# a+=b 前后的a是同一個對象
>>> a=[1,2]
>>> b=[3,4]
>>> id(a)
214391266944
>>> a+=b
>>> id(a)
214391266944
>>> print(a)
[1, 2, 3, 4]
# a=a+b 前后的a不是同一個對象
>>> a=[1,2]
>>> b=[3,4]
>>> id(a)
2143494790272
>>> a=a+b
>>> id(a)
2143494790592
>>> print(a)
[1, 2, 3, 4]

這是怎么回事呢?看了一下各位大佬寫的文章,總算是弄明白了一些。


+操作調用的是__add__方法

__add__方法會返回一個新的對象,原對象不修改。

+=操作調用了__iadd__方法

__iadd__方法直接在原對象上進行更新,該方法的返回值為None。
沒有該方法時,再嘗試調用__add__方法。

不可變對象只有__add__方法,沒有__iadd__

可變對象有__add__方法,也有__iadd__

結論

當變量是不可變對象時,a+=b和a=a+b調用的都是__add__方法,返回的是一個新對象
當變量是可變對象時,a+=b調用的是__iadd__方法,直接在原對象上進行更新;a=a+b調用的是__add__方法,返回一個新對象


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM