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


Posted in Python onNovember 01, 2018

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

示范代码如下:

class Demo:

def __del__(self):

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

del obj

程序执行结果如下:

grey@DESKTOP-3T80NPQ:/mnt/e/01_workspace/02_programme_language/03_python/03_OOP/2017/08$python del_method.py

calling __del__

但是,这并不是让__del__执行的唯一方式。其实,这个方法也可以直接调用。测试代码如下:

class Demo:

def __init__(self):

  print("calling __del__")

obj = Demo()

obj.__del__()

程序执行结果:

grey@DESKTOP-3T80NPQ:/mnt/e/01_workspace/02_programme_language/03_python/03_OOP/2017/08$python del_method.py

calling __del__

但是,这样的执行很多时候并不能够保证垃圾回收的正常执行。

如下代码:

grey@DESKTOP-3T80NPQ:/mnt/e/01_workspace/02_programme_language/03_python/03_OOP/2017/08$python del_method.py

calling __del__

calling __del__

执行结果:

grey@DESKTOP-3T80NPQ:/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))

执行结果:

grey@DESKTOP-3T80NPQ:/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))

执行结果:

grey@DESKTOP-3T80NPQ:/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的Tornado框架结合memcached页面改善博客性能
Apr 24 Python
在主机商的共享服务器上部署Django站点的方法
Jul 22 Python
Django 忘记管理员或忘记管理员密码 重设登录密码的方法
May 30 Python
详解Django-auth-ldap 配置方法
Dec 10 Python
python绘制地震散点图
Jun 18 Python
如何通过50行Python代码获取公众号全部文章
Jul 12 Python
解决Django Static内容不能加载显示的问题
Jul 28 Python
python数据化运营的重要意义
Nov 25 Python
python实现超级玛丽游戏
Mar 18 Python
基于Python中random.sample()的替代方案
May 23 Python
python实现简单的tcp 文件下载
Sep 16 Python
Python os和os.path模块详情
Apr 02 Python
对Python2与Python3中__bool__方法的差异详解
Nov 01 #Python
对Python中for复合语句的使用示例讲解
Nov 01 #Python
使用Python获取网段IP个数以及地址清单的方法
Nov 01 #Python
使用Python获取并处理IP的类型及格式方法
Nov 01 #Python
使用Python进行目录的对比方法
Nov 01 #Python
详解python Todo清单实战
Nov 01 #Python
在Mac下使用python实现简单的目录树展示方法
Nov 01 #Python
You might like
php基础知识:类与对象(5) static
2006/12/13 PHP
PHP转换IP地址到真实地址的方法详解
2013/06/09 PHP
php实现图片缩放功能类
2013/12/18 PHP
解析PHP之提取多维数组指定列的方法
2017/01/03 PHP
漂亮的仿flash菜单,来自蓝色经典
2006/06/26 Javascript
Javascript核心读书有感之语句
2015/02/11 Javascript
javascript实现点击后变换按钮显示文字的方法
2015/05/13 Javascript
jQuery实现表单步骤流程导航代码分享
2015/08/28 Javascript
JavaScript中的对象和原型(一)
2016/08/12 Javascript
JS中把函数作为另一函数的参数传递方法(总结)
2017/06/28 Javascript
深入理解Vue-cli搭建项目后的目录结构探秘
2017/07/13 Javascript
js使用xml数据载体实现城市省份二级联动效果
2017/11/08 Javascript
使用JavaScript计算前一天和后一天的思路详解
2019/12/20 Javascript
jQuery 淡入/淡出效果函数用法分析
2020/05/19 jQuery
在Python程序中进行文件读取和写入操作的教程
2015/04/28 Python
Windows下搭建python开发环境详细步骤
2020/07/20 Python
pycharm中连接mysql数据库的步骤详解
2017/05/02 Python
python urllib爬取百度云连接的实例代码
2017/06/19 Python
浅析python中的迭代与迭代对象
2018/10/08 Python
Python使用百度翻译开发平台实现英文翻译为中文功能示例
2019/08/08 Python
python+django+rest框架配置创建方法
2019/08/31 Python
python 获取剪切板内容的两种方法
2020/11/28 Python
详解Python Celery和RabbitMQ实战教程
2021/01/20 Python
详解如何用canvas画一个微笑的表情
2019/03/14 HTML / CSS
意大利会呼吸的鞋:Geox健乐士
2017/02/12 全球购物
白俄罗斯在线大型超市:e-dostavka.by
2019/07/25 全球购物
医学实习生自我鉴定
2013/12/12 职场文书
失业者真诚求职信范文
2013/12/25 职场文书
餐厅楼面主管岗位职责范本
2014/02/16 职场文书
党的生日活动方案
2014/08/15 职场文书
小学校长汇报材料
2014/08/20 职场文书
习总书记三严三实学习心得体会
2014/10/13 职场文书
店面出租协议书范本
2014/11/28 职场文书
我们的节日元宵节活动总结
2015/02/06 职场文书
伊索寓言读书笔记
2015/06/30 职场文书
SpringBoot整合Mybatis Generator自动生成代码
2021/08/23 Java/Android