python中a and b什么意思_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__方法,返回一個新對象
總結
以上是生活随笔為你收集整理的python中a and b什么意思_Python中的a+=b和a=a+b之间的区别是什么?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机主机组成部分和功能,电脑的组成部分
- 下一篇: celery 可视化_Django中Ce