官方原话
How does Python manage memory?
The details of Python memory management depend on the implementation. The standard implementation of Python, CPython, uses reference counting to detect inaccessible objects, and another mechanism to collect reference cycles, periodically executing a cycle detection algorithm which looks for inaccessible cycles and deletes the objects involved. The gc module provides functions to perform a garbage collection, obtain debugging statistics, and tune the collector’s parameters.
python的内存管理主要分为两部分
引用计数为主
一个对象被引用,计数+1,反之亦然。 python会定时去扫描所有对象,发现计数为0,则会被回收
标记清除与分代回收
标记清除
引用计数无法解决循环引用的问题,所以引入标记清除机制(这个机制大概是这样的,构建一个有向图,途中的每个节点都是一个对象,遍历这个图,删除所有不可达的节点)
分代回收
为了防止扫描过于频繁,引入该机制。对象一共分为3代,每个对象被扫描一定次数,他的代数会增加,说明这个对象被频繁使用,代数越高,扫描评率越低。