您好,登錄后才能下訂單哦!
不懂Python中的對象是什么意思?其實想解決這個問題也不難,下面讓小編帶著大家一起學習怎么去解決,希望大家閱讀完這篇文章后大所收獲。
Python中的對象
在Python中,一切都是對象。為了證明,你可以打開一個REPL并探索使用isinstance():
>>> isinstance(1, object) True >>> isinstance(list(), object) True >>> isinstance(True, object) True >>> def foo(): ... pass ... >>> isinstance(foo, object) True
此代碼向您顯示Python中的所有內容確實是一個對象。每個對象至少包含三個數據:
參考計數、類型、值
該引用計數為內存管理。要深入了解Python中的內存管理內部。
該類型在CPython層使用,以確保運行時的類型安全性。最后,有值,即與對象關聯的實際值。
但并非所有對象都是相同的。您還需要了解另一個重要的區別:不可變對象和可變對象。理解對象類型之間的差異確實有助于闡明Python中的指針。
不可變對象和可變對象
在Python中,有兩種類型的對象:
無法更改的不可變對象、可以改變的可變對象。
理解這種差異是在Python中學習指針的第一個關鍵。以下是常見類型的細分以及它們是否可變或不可變:
Type Immutable? int Yes float Yes bool Yes complex Yes tuple Yes frozenset Yes str Yes list No set No dict No
如您所見,許多常用的基元類型是不可變的。您可以通過編寫一些Python來證明這一點。您需要Python標準庫中的一些工具:
id() 返回對象的內存地址。
isTrue當且僅當兩個對象具有相同的內存地址時才返回。
再一次,您可以在REPL環境中使用它們:
>>> x = 5 >>> id(x) 94529957049376
在上面的代碼中,已分配的值5來x。如果您嘗試使用add修改此值,那么您將獲得一個新對象:
>>> x + = 1 >>> x 6 >>> id (x ) 94529957049408
即使上面的代碼似乎修改了值x,你也會得到一個新對象作為響應。
該str類型也是不變的:
>>> s = "real_python" >>> id(s) 140637819584048 >>> s += "_rocks" >>> s 'real_python_rocks' >>> id(s) 140637819609424
同樣,操作后s最終會有不同的內存地址+=。
對于某些對象list,+=將轉換為__iadd__()(就地添加)。這將修改self并返回相同的ID。但是,str并int沒有這些方法而導致__add__()調用而不是__iadd__()。
試圖直接改變字符串會s導致錯誤:
>>> s[0] = "R" Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'str' object does not support item assignment
上面的代碼失敗了,Python表明它str不支持這種突變,這與該str類型是不可變的定義一致。
與可變對象形成對比,例如list:
>>> my_list = [1, 2, 3] >>> id(my_list) 140637819575368 >>> my_list.append(4) >>> my_list [1, 2, 3, 4] >>> id(my_list) 140637819575368
此代碼顯示了兩種類型對象的主要區別。my_list最初有一個id。即使在4附加到列表后,my_list也具有相同的 ID。這是因為list類型是可變的。
證明列表可變的另一種方法是賦值:
>>> my_list[0] = 0 >>> my_list [0, 2, 3, 4] >>> id(my_list) 140637819575368
在此代碼中,您my_list將其第一個元素變異并設置為0。但是,即使在此分配之后,它仍保持相同的ID。隨著可變和不可變對象的出現,的下一步是理解Python的變量生態系統。
感謝你能夠認真閱讀完這篇文章,希望小編分享Python中的對象是什么意思內容對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,遇到問題就找億速云,詳細的解決方法等著你來學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。