前言
本文主要給大家介紹的是關(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]: 4476839480In [67]: id(b)Out[67]: 4476839480In [68]: a = [1, 2, 3]In [69]: b = aIn [70]: id(a)Out[70]: 4477149984In [71]: id(b)Out[71]: 4477149984In [72]: a += [4, 5, 6]In [73]: aOut[73]: [1, 2, 3, 4, 5, 6]In [74]: bOut[74]: [1, 2, 3, 4, 5, 6]In [75]: id(a)Out[75]: 4477149984In [76]: id(b)Out[76]: 4477149984
x = x + y
In [77]: a = [1, 2, 3]In [78]: b = aIn [79]: id(a)Out[79]: 4476686208In [80]: id(b)Out[80]: 4476686208In [81]: a = a + [4, 5, 6]In [82]: aOut[82]: [1, 2, 3, 4, 5, 6]In [83]: bOut[83]: [1, 2, 3]In [84]: id(a)Out[84]: 4477187640In [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_VALUEIn [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é)碼是不同的:
注意:以上僅適用于CPython實(shí)現(xiàn)。
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)VEVB武林網(wǎng)的支持。
新聞熱點(diǎn)
疑難解答
圖片精選