Python对象中__del__方法起作用的条件详解

 更新时间:2018年11月01日 12:13:31   作者:grey_csdn   我要评论

今天小编就为大家分享一篇Python对象中__del__方法起作用的条件详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

对象的__del__是对象在被gc消除回收的时候起作用的一个方法,它的执行一般也就意味着对象不能够继续引用。

示范代码如下:

class Demo:

def __del__(self):

  print("calling __del__")
 
obj = Demo()

del obj

程序执行结果如下:

[email protected]:/mnt/e/01_workspace/02_programme_language/03_python/03_OOP/2017/08$python del_method.py

calling __del__

但是,这并不是让__del__执行的唯一方式。其实,这个方法也可以直接调用。测?#28304;?#30721;如下:

class Demo:

def __init__(self):

  print("calling __del__")

obj = Demo()

obj.__del__()

程序执行结果:

[email protected]:/mnt/e/01_workspace/02_programme_language/03_python/03_OOP/2017/08$python del_method.py

calling __del__ 

但是,这样的执行很多时候并不能够保证垃圾回收的正常执?#23567;?/p>

如下代码:

[email protected]:/mnt/e/01_workspace/02_programme_language/03_python/03_OOP/2017/08$python del_method.py

calling __del__

calling __del__

执行结果:

[email protected]:/mnt/e/01_workspace/02_programme_language/03_python/03_OOP/2017/08$python del_method.py

calling __del__

calling __del__

推测:上面的删除方法触发了两次删除,但是由于引用关系,删除销毁其实没有实现。

修改代码验证如下:

class Demo:

def __del__(self):

  print("calling __del__")

  del self

 

obj = Demo()

obj.__del__()

print(id(obj))

执行结果:

[email protected]:/mnt/e/01_workspace/02_programme_language/03_python/03_OOP/2017/08$python del_method.py

calling __del__

140726800222040

calling __del__

从上面看来,其实主要还有对对象的引用,这个销毁的动作还是需要等待对象引用没有了以后才能够完成。进一步验证代码:

class Demo:

def __del__(self):

  print("calling __del__")

  del self

 

obj = Demo()

obj.__del__()

print(id(obj))

print(id(obj))

执行结果:

[email protected]:/mnt/e/01_workspace/02_programme_language/03_python/03_OOP/2017/08$python del_method.py

calling __del__

140568015406936

140568015406936

calling __del__

从上面结果看,猜测还是准确的。

以上这篇Python对象中__del__方法起作用的条件详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 遗传算法python版

    遗传算法python版

    这篇文章主要为大家详细介绍了python实现遗传算法,具有一定的参考价值,?#34892;?#36259;的小伙伴们可以参?#23478;?#19979;
    2018-03-03
  • Python continue继续循环用法总结

    Python continue继续循环用法总结

    本篇文章给大家总结了关于Python continue继续循环的相关知识点以及用法,有需要的朋友跟着学习下吧。
    2018-06-06
  • Python3实现发送QQ邮件功能(附件)

    Python3实现发送QQ邮件功能(附件)

    这篇文章主要为大家详细介绍了Python3实现发送QQ邮件功能,附件方面,具有一定的参考价值,?#34892;?#36259;的小伙伴们可以参?#23478;?#19979;
    2017-12-12
  • 使用Python的web.py框架实现类似Django的ORM查询的教程

    使用Python的web.py框架实现类似Django的ORM查询的教程

    这篇文章主要介绍了使用Python的web.py框架实现类似Django的ORM查询的教程,集成的ORM操作数据库向来是Python最强大的功能之一,本?#33041;蛺教?#22914;何在web.py框架上实现,需要的朋友可以参考下
    2015-05-05
  • 最新评论

    常用在线小工具

    时时彩包赢公式0369