初學python時,執行python程式時,我們大部分只關注運算的結果的正確性,很少會去想當python源**執行在python直譯器中,是怎樣執行的?
計算機執行乙個程式
程式/軟體的執行【核心機制】
因為所有的資源都是有限的,包括硬體資源,如果想要在有限的硬體資源上,執行盡可能多的軟體,需要有效的利用記憶體空間【軟體執行時,需要記憶體空間,若空間不足以滿足軟體執行所需要的空間,那麼軟體將不會執行或以最簡的方式執行(軟體介面可能會出現卡頓、斷幀等現象,執行不流暢)】計算機的結構相對於剛接觸的人來說比較複雜,很難了解內部結構。記憶體屬於計算機的硬體部分,所以這裡大致說一下計算機的硬體:
計算機硬體【記憶體|硬體都為8g】
應用軟體執行時:我們都知道python需要乙個開發/執行的環境,開發好的python程式可以通過執行命令執行1,向作業系統申請記憶體,作業系統給對應的軟體分配記憶體
2,軟體在申請到的記憶體中分配資料,載入資料,完成軟體的執行
***********************************
軟體的執行,需要將軟體資料載入到記憶體中
python ***.py
乙個程式或軟體中的資料有很多,當載入資料時,在申請到的記憶體空間裡,資料可能會比較混亂,不利於程式的執行,也會浪費很大的空間。
為了提高程式的執行效率和有效的利用記憶體空間,將申請到的記憶體空間進行了區域劃分
靜態區/常量區:不可變型別的引數【存放常駐記憶體的資料】**演示demo01資料區/方法區:函式/方法/型別…【載入**對應的二進位制資料】
在計算機上執行demo01.py檔案,先通過直譯器項計算機申請記憶體,這裡python直譯器展568m,但分給python程式的卻只有2m【】
**演示demo02
def back(m):
def back2(n):
n = 12
if __name__ == "__main__":
a = [20]
b = 20
back(a) # ? 發生了什麼
back2(b) # ? 發生了什麼
print(a) # [20, '10']!? 什麼結果 a[20, '10']? b[20]? c['10']?
print(b) # 20!? 什麼結果 a20? b12? c2012?
Python記憶體管理機制
一 python記憶體 因為要呼叫while迴圈,迴圈內有temp變數,不清楚python是否會在每一輪迴圈結束後自動釋放temp記憶體空間,做了乙個記憶體測試,發現無論temp none,還是del temp,只能銷毀變數,無法完全釋放記憶體空間。注 紅色部分標出相同記憶體id。python vi...
python記憶體分配機制
python中數值型別是不可變物件,當程式試圖改變資料的值時,程式會重新生成新的資料,而不是改變原來的資料。python函式的引數都是物件的引用,如果在引用不可變物件時嘗試修改物件,程式會在函式中生成新的物件 開闢新的位址空間 函式外被引用的物件則不會被改變。num 1 defadd num num...
python記憶體管理機制
a 1整數1為乙個物件。而a是乙個引用。利用賦值語句,引用a指向物件1。在python中,整數和短小的字元,python都會快取這些物件,以便重複使用。當我們建立多個等於1的引用時,實際上是讓所有這些引用指向同乙個物件。a 1 b 1 print id a print id b 在python中,每...