內存管理
包括:
- 變量無須事先聲明
- 變量無須指定類型
- 不用關心內存管理
- 變量名會被"回收"
- del 語句能夠直接釋放資源
變量定義
python中, 變量在第一次被賦值時自動聲明, 和其它語言一樣, 變量只有被創建和賦值后才能被使用
動態類型
變量名無須事先聲明, 也無須類型聲明
對象的類型和內存占用都是運行時確定的
內存分配
python解釋器會自動進行內存管理, 不用開發人員去關心
引用計數
- 要保持追蹤內存中的狀態, python使用了引用計數, 就是python內部記錄着所有使用中的對象各有多少引用.
- 一個內部跟蹤變量, 稱為一個引用計數器, 至於每個對象各有多少引用, 簡稱引用計數, 當對象被創建時, 就創建了一個引用計數, 當這個對象不再需要時, 也就是說, 這個對象的引用計數變為0時, 它被垃圾回收
增加引用計數
- 當對象被創建賦值給變量時, 該對象的引用計數就被設置為1
- 當同一個對象又被賦值給其他變量時, 或作為參數傳遞給函數, 方法或類實例時, 或者被賦值為一個窗口對象的成員時, 該對象的一個新的引用, 或者作為別名, 就被創建.
減少引用計數
當對象的引用被銷毀時, 引用計數會減少, 明顯的例子就是當引用離開其作用范圍時, 這種情況最經常出現在函數運行結束時, 所有局部變量都被自動銷毀, 對象的引用計數也就減少
垃圾收集
不再被使用的內存會被一種稱為垃圾收集的機制釋放
注: 解釋器跟蹤對象的引用計數, 垃圾回收機制負責釋放內存, 垃圾收集器是一塊獨立代碼, 它用來尋找引用計數為0的對象, 它也負責檢查雖然引用計數大於0但是也應該被銷毀的對象
引用語義
: python中在變量里保存值(對象)的引用, 采用這種方式, 變量所需的存儲空間大小一致, 因為其只需要保存一個引用值語義
變量的值直接保存在變量的存儲區里, 這樣一個整數類型的變量就需要保存一個整數所需的空間, 一個浮點數變量就需要足夠的空間存儲一個浮點數. C中就是值語義