python原始碼解剖

2022-05-07 08:03:10 字數 1190 閱讀 7828

print()本身就是用了多型:不同型別的物件,其實是呼叫了自身的print()方法

多型:動物 狗1 = new狗()

用公共的部分來指定型別,實則是呼叫各自的屬性

建立物件有兩種方式:

通過c api(存疑惑)

通過型別物件

(c語言執行機制)

python中的型別都是來自對c中相應型別的包裝,object是由struct定義的,python本身就是用c寫出來的,那c的背後呢

執行時rumtime就是程式執行的時候

執行時庫就是程式執行的時候所需要依賴的庫。

執行的時候指的是指令載入到記憶體並由cpu執行的時候。

c**編譯成可執行檔案的時候,指令沒有被cpu執行,這個時候算是編譯時,就是編譯的時候

硬碟**-編譯-記憶體-cpu,記憶體分配就涉及到物件所在的堆和變數所在的棧

malloc的全稱是memory allocation,記憶體分配

pyobject

ob_refcnt

*ob_type

pyvarobject

pyobject_head

ob_size:元素的個數

pyintobject

pyobject_head

ob_ival:存放『值』資訊,如int型別的5,string型別的『python』等

pystringobject

pyvarobject_head

ob_shash:儲存string物件的hash值

ob_sstate:標記了這個string物件是否經過了intern機制的處理

ob_sval:指向大小為ob_size+1的記憶體(+1是因為『\0』),ob_sval[ob_size]==』\0『

pylistobject

pyvarobject_head

ob_item:指向元素記憶體的指標(因為列表物件分為兩部分:一部分是物件本身所在的記憶體,另一部分是列表元素所在的記憶體,這兩塊記憶體是分離的,所以需要在物件本身中的ob_item來指向元素所在的記憶體,來將物件與資料聯絡起來)

allocated:為pylistobject申請的一塊記憶體的總大小

(比如為新的pylistobject申請了能放10個元素的記憶體,已經放了5個,那麼allocated為10,ob_size為5)

python原始碼剖析 Python原始碼剖析

第頁共 頁python 原始碼剖析 物件機制 1.物件 在python 的世界中,一切都是物件,乙個整數是乙個物件,乙個字串也是 乙個物件,更為奇妙的是,型別也是乙個物件,整數型別是乙個物件,字串類 型也是乙個物件。從 年guido 在那個聖誕節揭開 python 世界的大幕開始,一直到現在,pyt...

python原始碼理解

1,一切都是物件 2,typedef struct objectpyobject pyobject是不可變長度的物件 3,typedef structpyvarobject 可變長度的物件 4,每乙個物件都對應乙個型別物件 pytype type 5,每乙個物件都有乙個引用計數器 6,在python...

python原始碼解析

demo資料夾裡放的是一些例子 doc資料夾裡放的是文件,grammer是語法分析器,include是python所包含的一些標頭檔案,lib是python的庫,都是用python語言寫的,moduels是用c寫的python模組,parser是分詞器。是最生動的文字,現在我來附上我所理解的pyth...