在Python 中 a=a+b 与 a+=b 区别,你真的知道嘛?
如果你說 a+=b 是 a=a+b 的簡單寫法,那你只說對了一半,你還沒有弄清楚 += 這種操作符的真正含義。
這兩種操作的結果都是 a=a+b, 但左邊的 a 和 右邊的 a 還是同一個對象么?當弄不清楚的時候,我們可以在 Python 解釋器中試驗一下。
可以看出,兩種方式之后,a 與原來的 a 的 id 不同,它們不再是同一個對象,也就是說當 a 是數字的時候,a+=b 是 a=a+b 的簡單寫法,那么當 a 是列表的時候呢?
''' 學習中遇到問題沒人解答?小編創建了一個Python學習交流QQ群:531509025 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書! '''>>> a = [1] >>> id(a) 140401184850560 >>> a = a + [2] >>> id(a) 140401184297216 >>> >>> a = [1] >>> id(a) 140401184850560 >>> a += [2] >>> id(a) 140401184850560 >>>可以看出,當 a 是列表時,a += b,中的 a 與原來的 a 的 id 是同一個,說明 a += b 并沒有創建新的對象,而 a = a+b 新創建了一個新的對象,創建對象是有成本的,因此在這種情況下, a+=b 的性能是比較高的,這一點可以驗證:
兩種方法都執行 10 萬次時,性能相差 1900 倍。
總結一下,對不可變對象, a+=b 就是 a=a+b 的簡單寫法,比如數字,字符串,元組。請注意,元組也是可以 a+=b、a=a+b 的哦,元組的不可變,指的是這個元組指向的對象不可變,但是元組變量卻是可以指向新的元組的。
對于可變對象,a+=b 在 a 的基礎上進行自增,不創建新對象,而a=a+b,創建了新的對象,然后再讓變量 a 指向這個新創建的對象,涉及創建對象的操作,因此性能較差。可變對象有列表,字典,集合,類似的,a=a*b與 a*=b 也是一樣的,不過只有列表才支持 + 和* 這種運算符。
最后的話
現在你應該明白了 a=a+b 與 a+=b,a=a*b 與a*=b的區別。對于列表而言,a*=b、a*=b是在原有列表上原地進行操作,不創建新的對象,性能會更高效。
有時候越簡單的問題,越是被人忽略,卻藏著不少細節,技術的道路上,細節是魔鬼,搞懂細節,也是提升技術水平的方法。
總結
以上是生活随笔為你收集整理的在Python 中 a=a+b 与 a+=b 区别,你真的知道嘛?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python基础中apply()函数的正
- 下一篇: python内置函数map reduce