Python参考计数

示例

绝大多数Python内存管理都是通过引用计数来处理的。

每次引用对象(例如,分配给变量)时,其引用计数都会自动增加。取消引用后(例如,变量超出范围),其引用计数将自动减少。

当引用计数达到零时,对象将立即被销毁并立即释放内存。因此,在大多数情况下,甚至不需要垃圾收集器。

>>> import gc; gc.disable()  # 禁用垃圾收集器
>>> class Track:
        def __init__(self):
            print("Initialized")
        def __del__(self):
            print("Destructed")
>>> def foo():
        Track()
        # 立即销毁,因为不再有任何参考
        print("---")
        t = Track()
        # 变量已被引用,因此尚未销毁
        print("---")
        # 函数退出时销毁变量
>>> foo()
Initialized
Destructed
---
Initialized
---
Destructed

为了进一步说明引用的概念:

>>> def bar():
        return Track()
>>> t = bar()
Initialized
>>> another_t = t  # 分配另一个参考
>>> print("...")
...
>>> t = None          # 尚未销毁-another_t仍引用它
>>> another_t = None  # 最终引用不见了,对象被破坏了
Destructed