python中物件包含 Python中的物件

2021-10-21 04:17:19 字數 2204 閱讀 7479

python中的物件

在python中,一切都是物件。為了證明,你可以開啟乙個repl並探索使用isinstance():

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)

在上面的**中,已分配的值5來x。如果您嘗試使用add修改此值,那麼您將獲得乙個新物件:>>> x    =  1

>>> x

>>> id (x )

即使上面的**似乎修改了值x,你也會得到乙個新物件作為響應。

該str型別也是不變的:>>> s = "real_python"

>>> id(s)

>>> s  = "_rocks"

>>> s

'real_python_rocks'

>>> id(s)

同樣,操作後s最終會有不同的記憶體位址 =。

對於某些物件list, =將轉換為__iadd__()(就地新增)。這將修改self並返回相同的id。但是,str並int沒有這些方法而導致__add__()呼叫而不是__iadd__()。

試圖直接改變字串會s導致錯誤:>>> s[0] = "r"

traceback (most recent call last):

file "", line 1, in 

typeerror: 'str' object does not support item assignment

上面的**失敗了,python表明它str不支援這種突變,這與該str型別是不可變的定義一致。

與可變物件形成對比,例如list:>>> my_list = [1, 2, 3]

>>> id(my_list)

>>> my_list

[1, 2, 3, 4]

>>> id(my_list)

此**顯示了兩種型別物件的主要區別。my_list最初有乙個id。即使在4附加到列表後,my_list也具有相同的 id。這是因為list型別是可變的。

證明列表可變的另一種方法是賦值:>>> my_list[0] = 0

>>> my_list

[0, 2, 3, 4]

>>> id(my_list)

在此**中,您my_list將其第乙個元素變異並設定為0。但是,即使在此分配之後,它仍保持相同的id。隨著可變和不可變物件的出現,的下一步是理解python的變數生態系統。

【python中的變數】

python物件怎麼理解 如何理解python物件

類 class 抽象的概念,比如說人類 鳥類 水果 是乙個總的稱呼,沒有具體到某個物體 物件 object,指具體例項,instance 給物件增加乙個例項變數 增加乙個skills例項變數 p.skills programming writing print p.skills 刪除p物件的name...

python中建立類role 初識Python類

吐槽 學習物件導向就像你追乙個女神一樣,剛剛有點感覺了,過幾天又陷入絕望的感覺,很蛋疼。類的語法 classperson object print learning class test person test就是類person的例項化物件 例項化,就是以person類為模板,在記憶體裡開闢一塊空間...

springmvc 請求物件中包含list的

1.前端的寫法 這是公司的封裝的前端框架 functionsearch vargrid grid panel grid fi.ajaxpost query params,function result 2.springmvc 的引數 public map,querylist modelattribu...