免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
Python中的a+=b和a=a+b之間的區(qū)別是什么?

我一直以為a+=b和a=a+b是一樣的,畢竟效果是一樣的嘛。后來我發(fā)現(xiàn)并不是這么回事?我發(fā)現(xiàn)當(dāng)變量是不可變對象時,a+=b和a=a+b是一樣的,不過我注意到了前后兩個a已經(jīng)不是同一個對象了。而當(dāng)變量是可變對象時,雖然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]

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


+操作調(diào)用的是__add__方法

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

+=操作調(diào)用了__iadd__方法

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

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

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

結(jié)論

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

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Python 表達式 i += x 與 i = i + x 等價嗎?
你知道Python中a = b和a = a b的結(jié)果是不一樣的嗎?
python中x+=y和x=x+y的區(qū)別_x+=y是什么意思
魔法方法在 Cython 中更加魔法
經(jīng)典4大Python面試題!初級者,你所需知的(附標(biāo)準(zhǔn)答案)-下篇
深入理解python中函數(shù)傳遞參數(shù)是值傳遞還是引用傳遞
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服