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

2021-10-10 19:28:49 字數 1519 閱讀 2588

第頁共

頁python

原始碼剖析

——物件機制

1.物件

在python

的世界中,一切都是物件,乙個整數是乙個物件,乙個字串也是

乙個物件,更為奇妙的是,型別也是乙個物件,整數型別是乙個物件,字串類

型也是乙個物件。從

年guido

在那個聖誕節揭開

python

世界的大幕開始,

一直到現在,

python

經歷了一次一次的公升級,

但是其實現語言一直都是

ansi c

我們知道,

c並不是乙個物件導向的語言,那麼在

python

中,它的物件機制是

如何實現的呢?

對於人的思維來說,

物件是乙個比較形象的概念,

而對於計算機來說,

物件實際上是乙個抽象的概念。計算機並不能理解這是乙個整數,那是乙個字串,

對於計算機

來說,它所知道的一切都是位元組。通常的說法是,物件是資料以及

基於這些資料的操作的集合。

在計算機上,

乙個物件實際上就是一片被分配的內

存空間,這些記憶體

可能是連續的,也有可能是離散的,這都不重要,重要的是

這片內存在更高的層次上可以作為乙個整體來考慮,

這個整體就是乙個物件。

在這片記憶體中,儲存著一系

列的資料以及可以對這些資料進行修改或讀取的一系

列操作的**。

在python

中,物件就是在堆上申請的結構體,物件不能是被靜態初始化的,

並且也不能是在棧空間上生存的。

唯一的例外就是型別物件

(type object)

python

中所有的型別物件都是被靜態初始化的。

在python

中,乙個物件一旦被建立,它在記憶體中的大小就是不變的了。這

就意味著那些需要容納可變長度資料的物件只能在物件內維護乙個指向乙個可

變大小的記憶體區域的指標。

為什麼要設定這樣一條特殊的規則呢,因為遵循這

樣的規則可以使通過指標維護物件的工作變得非常的簡單。

因為一旦允許物件的

大小可在執行期改變,我們可以考

慮如下的情形。在記憶體中有物件

a,並且其

後緊跟著物件

b。如果執行期某個時刻,

a的大小增大了,這意味著必須將整個

a移動到記憶體中的其他位置,否則

a增大的部分將覆蓋原本屬於

b的資料。一旦將a

移動到記憶體中的其他位置,那麼所有指向

a的指標必須立即得到更新,

光是想一想,就知道這樣的工作是多麼的恐怖。

在python

中,所有的東西都是物件,而所有的物件都擁有一些相同的內容,

這些內容在

pyobject

中定義,

pyobject

是整個python

物件機制的核心。

原始碼剖析 Hashtable 原始碼剖析

hashtable同樣是基於雜湊表實現的,同樣每個元素都是key value對,其內部也是通過單鏈表解決衝突問題,容量不足 超過了閾值 時,同樣會自動增長。hashtable也是jdk1.0引入的類,是執行緒安全的,能用於多執行緒環境中。hashtable同樣實現了serializable介面,它支...

Python原始碼剖析 Dict

為了刻畫某種關係,現代的程式語言都會提供關聯式的容器。關聯式容器中的元素分別是以 鍵 key 或值 value 這樣的形式存在。例如 3,5 3,6 就是一對對應的鍵與值。python中的關聯式容器是pydictobject。python通過pydictobject建立執行python位元組碼的執行...

《Python原始碼剖析》上架

經過幾年的打磨,在博文視點的大力支援下,python原始碼剖析 終於上架了。當年開始剖析python原始碼的時候,對於出版,心裡只有乙個朦朦朧朧的夢想,甚至可以說是幻想,現在幻想成真,回想一下,其間的跌宕也真讓人感慨。只要堅持,夢想終會成真。很多書籍出版的時候都會說,自此書以後,學 技術的可以分為兩...