1. 程式人生 > ><Python基礎>python是如何進行內存管理的

<Python基礎>python是如何進行內存管理的

垃圾收集 字符串 因此 重新 包含 會銷 操作 部分 加速

.Python 是如何進行內存管理的?
答:從三個方面來說,一對象的引用計數機制,二垃圾回收機制,三內存池機制
⒈對象的引用計數機制
Python 內部使用引用計數,來保持追蹤內存中的對象,所有對象都有引用計數。
引用計數增加的情況:
?一個對象分配一個新名稱
?將其放入一個容器中(如列表、元組或字典)
引用計數減少的情況:
?使用 del 語句對對象別名顯示的銷毀
?引用超出作用域或被重新賦值
sys.getrefcount( )函數可以獲得對象的當前引用計數
多數情況下,引用計數比你猜測得要大得多。對於不可變數據(如數字和字符串),解釋器會在程序的
不同部分共享內存,以便節約內存。
⒉垃圾回收
?當一個對象的引用計數歸零時,它將被垃圾收集機制處理掉。
?當兩個對象 a 和 b 相互引用時,del 語句可以減少 a 和 b 的引用計數,並銷毀用於引用底層對象的名
稱。然而由於每個對象都包含一個對其他對象的應用,
因此引用計數不會歸零,對象也不會銷毀。(從而導致內存泄露)。為解決這一問題,解釋器會定期執
行一個循環檢測器,搜索不可訪問對象的循環並刪除它們。
⒊內存池機制
Python 提供了對內存的垃圾收集機制,但是它將不用的內存放到內存池而不是返回給操作系統。
?Pymalloc 機制。為了加速 Python 的執行效率,Python 引入了一個內存池機制,用於管理對小塊內存
的申請和釋放。
?Python 中所有小於 256 個字節的對象都使用 pymalloc 實現的分配器,而大的對象則使用系統的
malloc。
?對於 Python 對象,如整數,浮點數和 List,都有其獨立的私有內存池,對象間不共享他們的內存池。
也就是說如果你分配又釋放了大量的整數,用於緩存這些整數的內存就不能再分配給浮點數

<Python基礎>python是如何進行內存管理的