Python中垃圾回收和德尔语句详解

  

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中垃圾回收和德尔语句详解