Python内存管理

tech2023-11-02  108

Python的内存管理是依据对象引用次数管理的,对象被创建,分配内存给对象;对象引用计数为0,分配给对象的内存被回收。

下面这些情况对象的引用计数+1:

对象被创建:a = Create_Object() 引用被赋值:b = a 被作为参数传递给函数:f(a) 作为容器对象的一个元素:lst = [1,a]

下面这些情况对象的引用计数-1

离开作用域。比如f(a)函数结束时,a指向的对象引用减1。 引用被显式的销毁:del a 对象的一个别名被赋值给其他对象:b = 1 对象从一个容器对象中移除:lst.remove(a) 容器对象本身被销毁:del lst。

关于__del__魔法

from sys import getrefcount as count class Test(object): def __del__(self): print("__del__ called!") def __repr__(self): return "test object." def f(x): print(count(x)) t = Test() del t

程序运行的结果如下,打印的计数会比预想的多1,原因是a传入count当参数时也算一次计数。

__del__ called! 2 4 2 3 2 4 program end. __del__ called!

从运行结果可以知道,__del__魔法当程序计数为0或者程序退出的时候会被调用。

最新回复(0)