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实现统计英文单词个数及字符串分割代码
May 28 Python
详解python中xlrd包的安装与处理Excel表格
Dec 16 Python
python贪婪匹配以及多行匹配的实例讲解
Apr 19 Python
PyQt4实现下拉菜单可供选择并打印出来
Apr 20 Python
Python读写/追加excel文件Demo分享
May 03 Python
python设置值及NaN值处理方法
Jul 03 Python
python 地图经纬度转换、纠偏的实例代码
Aug 06 Python
python selenium firefox使用详解
Feb 26 Python
python通过http下载文件的方法详解
Jul 26 Python
VSCode中自动为Python文件添加头部注释
Nov 14 Python
Python的pygame安装教程详解
Feb 10 Python
python打开文件的方式有哪些
Jun 29 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 模拟get_headers函数的代码示例
2013/04/27 PHP
使用Thinkphp框架开发移动端接口
2015/08/05 PHP
WordPress中用于创建以及获取侧边栏的PHP函数讲解
2015/12/29 PHP
php封装的验证码工具类完整实例
2016/10/19 PHP
PHP实现支付宝即时到账功能
2016/12/21 PHP
CI框架(CodeIgniter)操作redis的方法详解
2018/01/25 PHP
JS中剪贴板兼容性、判断复制成功或失败
2021/03/09 Javascript
基于jQuery的试卷自动排版系统实现代码
2011/01/06 Javascript
查看图片(前进后退)功能实现js代码
2013/04/24 Javascript
jquery+ajax+C#实现无刷新操作数据库数据的简单实例
2014/02/08 Javascript
jquery查找父元素、子元素(个人经验总结)
2014/04/09 Javascript
Seajs 简易文档 提供简单、极致的模块化开发体验
2016/04/13 Javascript
JS中的hasOwnProperty()和isPrototypeOf()属性实例详解
2016/08/11 Javascript
jQuery实现二维码扫描功能
2017/01/09 Javascript
webpack4 CSS Tree Shaking的使用
2018/09/03 Javascript
浅析Proxy可以优化vue的数据监听机制问题及实现思路
2018/11/29 Javascript
react国际化化插件react-i18n-auto使用详解
2020/03/31 Javascript
解决Nuxt使用axios跨域问题
2020/07/06 Javascript
vantUI 获得piker选中值的自定义ID操作
2020/11/04 Javascript
[04:29]DOTA2亚洲邀请赛小组赛第一日 TOP10精彩集锦
2015/02/01 DOTA
基于python log取对数详解
2018/06/08 Python
Python+OpenCv制作证件图片生成器的操作方法
2019/08/21 Python
pygame库实现俄罗斯方块小游戏
2019/10/29 Python
Python打开文件、文件读写操作、with方式、文件常用函数实例分析
2020/01/07 Python
在Python IDLE 下调用anaconda中的库教程
2020/03/09 Python
Python3爬虫中pyspider的安装步骤
2020/07/29 Python
基于Python爬取股票数据过程详解
2020/10/21 Python
pandas统计重复值次数的方法实现
2021/02/20 Python
One.com挪威:北欧成长最快的网络托管公司
2016/11/19 全球购物
法国滑雪假期的专家:Ski Planet
2019/11/02 全球购物
物流专业大学生职业生涯规划书范文
2014/01/15 职场文书
政府法律服务方案
2014/06/14 职场文书
2016新春团拜会致辞
2015/08/01 职场文书
小学二年级语文教学反思
2016/03/03 职场文书
Python趣味爬虫之用Python实现智慧校园一键评教
2021/05/28 Python
Python爬虫入门案例之爬取去哪儿旅游景点攻略以及可视化分析
2021/10/16 Python