Python中的垃圾回收算法是采用引用计数,当一个对象的引用计数为0时,Python的垃圾回收机制就会将对象回收
=袄铩? b=
拉里这个字符串对象,在第一行被贴了一个标签后,引用计数为1,之后在第二行,由贴上了b标签,此时,该字符串对象的引用计数为
=袄铩? b=一个 德尔
注意:在Python语言中,德尔语句操作某个对象的时候,并不是直接将该对象在内存中删除,而是将该对象的引用计数1
在在在=袄铩? 在在在b=一个 在在在德尔一 在在在id (b) 4572141808 在在在id(一个) 回溯(最近的电话): 文件“& lt; input>”,1号线& lt; module> id(一个) NameError:名字' a '没有定义
从以上示例中可以看的出,拉里这个字符串对象在第一行被贴上了一个标签,此时字符串对象的引用计数为1,接着第二行又被贴上了b标签,此时该字符串对象的引用计数为2,在第三行中,德尔语言删除了一个变量(标签),在后续的打印中可以看的出,内存中实际的字符串对象并没有被删除,德尔语言只是删除了一个变量对该字符串对象的引用,所以对于拉里这个字符串对象来说,效果只是引用计数1
<强>魔法函数之__del__ 强>
类中的__del__魔法函数,支持我们自定义清理对象的逻辑,当Python解释器使用▽语言删除类的对象的时候,会自动调用类中的__del__函数,我们可以对其进行重载
在在在类参考: … …def __init__(自我、名称): …self.name=名字 … …def __del__(自我): …打印(“删除对象”) …德尔self.name … 在在在 在在在r=Ref (name=袄铩? 在在在打印(r.name) 拉里 在在在 在在在德尔r >之前删除对象
在在在 在在在打印(r.name) 回溯(最近的电话): 文件“& lt; input>”,1号线& lt; module> 打印(r.name) NameError:名字“r”没有定义 >之前我们可以通过重载__del__魔法函数,自己灵活控制在德尔对象的时候执行哪些善后操作
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
Python中垃圾回收和德尔语句详解