首先,對象的引用計數機制
第二,垃圾回收機制
第三,內存池機制
首先,對象的引用計數機制
Python內部使用引用計數來跟蹤內存中的對象,所有對象都有引用計數。
當引用計數增加時:
1.為對象指定新名稱。
2.放在壹個容器裏(比如列表、元組或者字典)。
當參考計數減少時:
1.用del語句銷毀對象別名的顯示
2.引用超出範圍或被重新分配的sys.getrefcount()函數可以獲取對象的當前引用計數。
在大多數情況下,引用計數比您猜測的要大得多。對於不可變的數據(比如數字和字符串),解釋器會在程序的不同部分共享內存以節省內存。
第二,垃圾回收
1.當對象的引用計數歸零時,它將被垃圾收集機制處理掉。
2.當兩個對象A和B相互引用時,del語句可以減少A和B的引用計數,並銷毀用於引用底層對象的名稱。但是,由於每個對象都包含對其他對象的應用,引用計數不會歸零,對象也不會被銷毀。(導致內存泄漏)。為了解決這個問題,解釋器將定期執行循環檢測器來搜索不可訪問對象的循環並刪除它們。
第三,內存池機制
Python為內存提供了垃圾收集機制,但是它將未使用的內存放入內存池,而不是返回給操作系統。
1,Pymalloc機制。為了加快Python的執行效率,Python引入了內存池機制來管理小塊內存的申請和釋放。
2.Python中所有小於256字節的對象都使用pymalloc實現的分配器,而大型對象使用系統的malloc。
3.Python對象,比如整數、浮點數、List,都有自己的私有內存池,對象不* * *共享自己的內存池。也就是說,如果妳分配釋放了大量的整數,那麽用來緩存這些整數的內存就不能再分配給浮點數了。
更多Python知識,請關註Python視頻教程專欄。