您好,登錄后才能下訂單哦!
這篇文章主要介紹“Python運算中a+=b和a=a+b相等嗎”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“Python運算中a+=b和a=a+b相等嗎”文章能幫助大家解決問題。
>>> b = </code><code>[</code><code>0, 1, 2</code><code>]</code> <code>>>> a = b >>> a += [3] >>> b [0, 1, 2, 3] >>> a [0, 1, 2, 3]
此時a和b的結果是一樣的
再看
>>> b = [0, 1, 2] >>> a = b >>> a = a + [3] >>> b [0, 1, 2] >>> a [0, 1, 2, 3]
顯然,兩者是有區別的,而且這種區別只出現在可變對象(為什么是可變對象后面再說),是什么原因造成了兩者的區別呢?
+= 操作調用的是 __iadd__方法,如果對象沒有該方法時,再嘗試去調用__add__方法
a = [0, 1, 2] a += [3] # 等價于 a=a.__iadd__([3]) print(a) #[0, 1, 2, 3]
__iadd__方法直接在原對象a上進行更新,對于list來說,iadd返回self,最后是需要做一次看上去多余的賦值,因為python編譯器在編譯的時候并不知道a是什么類型,統一編譯成這樣兼容可變和不可變類型。
a = [0, 1, 2] a += [3] # 等價于 a=a.__iadd__([3]) print(a) #[0, 1, 2, 3]
__add__方法會返回一個新的對象,原對象不修改,因為這里 a被重新賦值了,a指向了一個新的對象,而b還是指向原來對象,所以出現了文章開頭a不等于b的情況
a = [0, 1, 2] print(a.__add__([3])) # [0, 1, 2, 3] print(a) # [0, 1, 2]
為什么前面我說這種差異只會發生的可變對象身上?因為對于不可變對象,根本沒有 __iadd__方法,所以+=和+的效果是一樣的,調的都是 __add__ 方法。
內置對象中,常見的不可變對象和可變對象有哪些呢?這種事情ChatGPT很擅長回答。
ChatGPT除了給你列出表格,還會給你解釋什么是可變對象和不可變對象
可變對象是指創建后可以被修改的對象,例如列表、字典和集合等,這些對象可以增加、刪除、修改其中的元素。而不可變對象則是創建后不能被修改的對象,例如數字、字符串、元組和布爾值等,這些對象在創建后不能被修改。
需要注意的是,Python 中的一些不可變對象,例如元組和命名元組,可以包含可變對象,例如列表和字典。這意味著雖然元組本身是不可變的,但是元組中包含的可變對象可以被修改。此外,Python 中還有一些特殊的對象,例如 frozenset,它是一種不可變的集合,不能被修改。
ChaGPT絕對算是一個不折不扣的輔助編程神器
AI不會讓你失業,會用AI的人才會讓你失業,ChatGPT不會淘汰你,能先駕馭ChatGPT的人會淘汰你。
關于“Python運算中a+=b和a=a+b相等嗎”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。