Python中表達(dá)式x += y和x = x+y 的區(qū)別詳解
前言
本文主要給大家介紹的是關(guān)于Python中表達(dá)式x += y和x = x+y 區(qū)別的相關(guān)內(nèi)容,分享出來(lái)供大家參考學(xué)習(xí),下面來(lái)看看詳細(xì)的介紹:
直接看下面代碼:
x +=y
In [66]: id(a) Out[66]: 4476839480 In [67]: id(b) Out[67]: 4476839480 In [68]: a = [1, 2, 3] In [69]: b = a In [70]: id(a) Out[70]: 4477149984 In [71]: id(b) Out[71]: 4477149984 In [72]: a += [4, 5, 6] In [73]: a Out[73]: [1, 2, 3, 4, 5, 6] In [74]: b Out[74]: [1, 2, 3, 4, 5, 6] In [75]: id(a) Out[75]: 4477149984 In [76]: id(b) Out[76]: 4477149984
x = x + y
In [77]: a = [1, 2, 3] In [78]: b = a In [79]: id(a) Out[79]: 4476686208 In [80]: id(b) Out[80]: 4476686208 In [81]: a = a + [4, 5, 6] In [82]: a Out[82]: [1, 2, 3, 4, 5, 6] In [83]: b Out[83]: [1, 2, 3] In [84]: id(a) Out[84]: 4477187640 In [85]: id(b) Out[85]: 4476686208
可以看出對(duì)于可變對(duì)象而言 x = x + y 這種形式已經(jīng)改變了x的指向,而不是"inplace"的修改。
使用dis模塊進(jìn)行一下驗(yàn)證。
In [86]: def foo(x, y): ...: x += y ...: return x ...: In [87]: def foo(x, y): ...: x += y ...: In [88]: def foo2(x, y): ...: x = x + y ...: In [89]: dis.dis(foo) 2 0 LOAD_FAST 0 (x) 3 LOAD_FAST 1 (y) 6 INPLACE_ADD 7 STORE_FAST 0 (x) 10 LOAD_CONST 0 (None) 13 RETURN_VALUE In [90]: dis.dis(foo2) 2 0 LOAD_FAST 0 (x) 3 LOAD_FAST 1 (y) 6 BINARY_ADD 7 STORE_FAST 0 (x) 10 LOAD_CONST 0 (None) 13 RETURN_VALUE
可以看到字節(jié)碼是不同的:
- += 對(duì)應(yīng) INPLACE_ADD
- 對(duì)應(yīng)BINARY_ADD
注意:以上僅適用于CPython實(shí)現(xiàn)。
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
Python pandas dataframe之重命名相同列名
這篇文章主要介紹了Python pandas dataframe之重命名相同列名方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-09-09通過(guò)代碼實(shí)例了解Python異常本質(zhì)
這篇文章主要介紹了通過(guò)代碼實(shí)例了解Python1異常本質(zhì),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-09-09分布式爬蟲scrapy-redis的實(shí)戰(zhàn)踩坑記錄
最近用scrapy-redis嘗試了分布式爬蟲,使用過(guò)程中也遇到了不少問(wèn)題,下面這篇文章主要給大家介紹了關(guān)于分布式爬蟲scrapy-redis的實(shí)戰(zhàn)踩坑記錄,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-08-08Python 實(shí)現(xiàn)Numpy中找出array中最大值所對(duì)應(yīng)的行和列
今天小編就為大家分享一篇Python 實(shí)現(xiàn)Numpy中找出array中最大值所對(duì)應(yīng)的行和列,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-11-11Python實(shí)現(xiàn)如何根據(jù)文件后綴進(jìn)行分類
本文主要為大家詳細(xì)介紹了如何通過(guò)python實(shí)現(xiàn)根據(jù)文件后綴實(shí)現(xiàn)分類,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以關(guān)注一下2021-12-12python 設(shè)置文件編碼格式的實(shí)現(xiàn)方法
下面小編就為大家分享一篇python 設(shè)置文件編碼格式的實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2017-12-12