系統:ubuntu 12.04 STL
python版本:2.7
既然要學習python的源碼,首先咱們要在電腦上安裝python而且下載python的源碼,ubuntu 12.04 STL
自帶的python版本爲2.7.3,這就能夠了,接下來下載源碼,下載python2.7.7的源代碼,下載結束後解壓文件,咱們會看到以下文件結構:,接下來介紹一下,
demo文件夾裏放的是一些例子;
Doc文件夾裏放的是文檔,Grammer是語法分析器,include是python所包含的一些頭文件,Lib是python的庫,都是用python語言寫的,Moduels是用C寫的python模塊,Parser是分詞器。圖片是最生動的文字,如今我來附上我所理解的python整體架構圖片:
其中,最左邊的python的庫,模塊以及用戶自定義的模塊,都依賴於python解釋器來實現,而python解釋器主要包括掃描器,分詞器,編譯器和代碼生成四部分,咱們寫一個python文件以後,由python解釋器執行,其大體執行過程以下:
一、掃描器掃描python文件,將掃描結果發給分詞器;
二、在掃描過程當中識別出文件中的對象,類型和結構(注:在python中類型和結構都是對象);
三、分詞器將結果發給編譯器,編譯器在此時生成相應對象同時給對象分配內存空間;
四、編譯以後將代碼生成,進行內存管理並處理當前狀態。
五、對象、類型、結構體、內存管理以及當前狀態構成了python極其複雜的runtime運行時。
還有,不少人會有疑問,python是動態語言,內存究竟是如何管理的,初來乍到,我也不太明白,因爲python的各類歷史緣由,python的內存處理和線程管理很是複雜,打開源碼看看,若是出現相似object_new這樣的東西,那麼他的內存就是用C++中的new來開闢的,若是是object_malloc這樣的東西,則表示內存是用C中的malloc來實現的。
python屬於脫管型的語言,內存不須要咱們手動處理,方便了不少,其實,python在底層是用自動引用計數器來實現的,python中建立小對象時,每每直接在內存池中建立,而大對象則是使用new/malloc從內存中再建立一個。針對並不複雜的對象關係時,好比只有一個對象時,python是不會運行鏈路檢測的,而若是對象不少,過系又很複雜,就會有一個鏈路檢測,以防出現循環引用和死循環的問題,當釋放內存時,則遵照自動引用計數的規則,很是了不得。
好了,本篇先講到這裏,下次繼續學習。python
後續的python學習筆記: http://www.androiddev.net/python2/ android