Python中表達(dá)式x += y和x = x+y 的區(qū)別詳解
前言
本文主要給大家介紹的是關(guān)于Python中表達(dá)式x += y和x = x+y 區(qū)別的相關(guān)內(nèi)容,分享出來供大家參考學(xué)習(xí),下面來看看詳細(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
可以看出對于可變對象而言 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é)碼是不同的:
- += 對應(yīng) INPLACE_ADD
- 對應(yīng)BINARY_ADD
注意:以上僅適用于CPython實(shí)現(xiàn)。
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
相關(guān)文章
Python pandas dataframe之重命名相同列名
這篇文章主要介紹了Python pandas dataframe之重命名相同列名方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-09-09分布式爬蟲scrapy-redis的實(shí)戰(zhàn)踩坑記錄
最近用scrapy-redis嘗試了分布式爬蟲,使用過程中也遇到了不少問題,下面這篇文章主要給大家介紹了關(guān)于分布式爬蟲scrapy-redis的實(shí)戰(zhàn)踩坑記錄,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-08-08Python 實(shí)現(xiàn)Numpy中找出array中最大值所對應(yīng)的行和列
今天小編就為大家分享一篇Python 實(shí)現(xiàn)Numpy中找出array中最大值所對應(yīng)的行和列,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-11-11Python實(shí)現(xiàn)如何根據(jù)文件后綴進(jìn)行分類
本文主要為大家詳細(xì)介紹了如何通過python實(shí)現(xiàn)根據(jù)文件后綴實(shí)現(xiàn)分類,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以關(guān)注一下2021-12-12python 設(shè)置文件編碼格式的實(shí)現(xiàn)方法
下面小編就為大家分享一篇python 設(shè)置文件編碼格式的實(shí)現(xiàn)方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2017-12-12