1. 程式人生 > >python 內存管理

python 內存管理

計數 都是 被垃圾回收 追蹤 代碼 使用 就是 事先 nbsp

內存管理

包括:

  • 變量無須事先聲明
  • 變量無須指定類型
  • 不用關心內存管理
  • 變量名會被"回收"
  • del 語句能夠直接釋放資源

變量定義

python中, 變量在第一次被賦值時自動聲明, 和其它語言一樣, 變量只有被創建和賦值後才能被使用

動態類型

變量名無須事先聲明, 也無須類型聲明
對象的類型和內存占用都是運行時確定的

內存分配

python解釋器會自動進行內存管理, 不用開發人員去關心

引用計數

  • 要保持追蹤內存中的狀態, python使用了引用計數, 就是python內部記錄著所有使用中的對象各有多少引用.
  • 一個內部跟蹤變量, 稱為一個引用計數器, 至於每個對象各有多少引用, 簡稱引用計數, 當對象被創建時, 就創建了一個引用計數, 當這個對象不再需要時, 也就是說, 這個對象的引用計數變為0時, 它被垃圾回收

增加引用計數

  • 當對象被創建賦值給變量時, 該對象的引用計數就被設置為1
  • 當同一個對象又被賦值給其他變量時, 或作為參數傳遞給函數, 方法或類實例時, 或者被賦值為一個窗口對象的成員時, 該對象的一個新的引用, 或者作為別名, 就被創建.

減少引用計數

當對象的引用被銷毀時, 引用計數會減少, 明顯的例子就是當引用離開其作用範圍時, 這種情況最經常出現在函數運行結束時, 所有局部變量都被自動銷毀, 對象的引用計數也就減少

垃圾收集

不再被使用的內存會被一種稱為垃圾收集的機制釋放

註: 解釋器跟蹤對象的引用計數, 垃圾回收機制負責釋放內存, 垃圾收集器是一塊獨立代碼, 它用來尋找引用計數為0的對象, 它也負責檢查雖然引用計數大於0但是也應該被銷毀的對象


    • 引用語義: python中在變量裏保存值(對象)的引用, 采用這種方式, 變量所需的存儲空間大小一致, 因為其只需要保存一個引用
    • 值語義變量的值直接保存在變量的存儲區裏, 這樣一個整數類型的變量就需要保存一個整數所需的空間, 一個浮點數變量就需要足夠的空間存儲一個浮點數. C中就是值語義

python 內存管理