參考了網上的一些部落格,連結如下:
https://www.cnblogs.com/geaozhang/p/7111961.html
這裡總結一下python的記憶體管理機制:
python利用“引用計數”實作一種較為簡單的“垃圾回收機制”,且掃描時使用“分代回收”提高掃描效率,且資源回收筒稱為“記憶體池”;
(1)引用計數:
簡而言之 ,就是在Python中,每個對象都有指向該對象的引用總數---引用計數,當某個對象的引用計數為0時,我們就可以考慮将其進行垃圾回收了;
(2)垃圾回收機制:
即是對上面的引用計數為0的對象進行回收,當然回收的時候采用了一個分代回收的機制,幫助提高掃描的效率。另外,Python中的垃圾回收不是直接釋放掉,而是将其回收到記憶體池中,以備下次使用;
(3)記憶體池:
垃圾資源回收筒,相當于一個金字塔結構,如下:

第3層:最上層,使用者對Python對象的直接操作
第1層和第2層:記憶體池,有Python的接口函數PyMem_Malloc實作-----若請求配置設定的記憶體在1~256位元組之間就使用記憶體池管理系統進行配置設定,調用malloc函數配置設定記憶體,但是每次隻會配置設定一塊大小為256K的大塊記憶體,不會調用free函數釋放記憶體,将該記憶體塊留在記憶體池中以便下次使用。
第0層:大記憶體-----若請求配置設定的記憶體大于256K,malloc函數配置設定記憶體,free函數釋放記憶體。
第-1,-2層:作業系統進行操作
注意:
python的這種引用計數還有一個問題就是“孤立引用環”的情況,如下: