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中wx将图标显示在右下角的脚本代码
Mar 08 Python
python如何实现远程控制电脑(结合微信)
Dec 21 Python
5款非常棒的Python工具
Jan 05 Python
python简单商城购物车实例代码
Mar 15 Python
selenium+python 去除启动的黑色cmd窗口方法
May 22 Python
win10下python3.5.2和tensorflow安装环境搭建教程
Sep 19 Python
Python generator生成器和yield表达式详解
Aug 08 Python
python 字典的打印实现
Sep 26 Python
Pytorch 实现数据集自定义读取
Jan 18 Python
Python使用requests模块爬取百度翻译
Aug 25 Python
如何完美的建立一个python项目
Oct 09 Python
python爬虫之利用selenium模块自动登录CSDN
Apr 22 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中的日期及时间
2006/11/23 PHP
php 连接mysql连接被重置的解决方法
2011/02/15 PHP
PHP数组交集的优化代码分析
2011/03/06 PHP
openflashchart 2.0 简单案例php版
2012/05/21 PHP
PHP版网站缓存加快打开速度的方法分享
2012/06/03 PHP
php不写闭合标签的好处
2014/03/04 PHP
php中 ob_start等函数截取标准输出的方法
2015/06/22 PHP
php 文件下载 出现下载文件内容乱码损坏的解决方法(推荐)
2016/11/16 PHP
微信接口生成带参数的二维码
2017/07/31 PHP
ASP.NET jQuery 实例10 动态修改hyperlink的URL值
2012/02/03 Javascript
JS简单的轮播的图片滚动实例
2013/06/17 Javascript
jQuery jcrop插件截图使用方法
2013/11/20 Javascript
JavaScript eval() 函数介绍及应用示例
2014/07/29 Javascript
NodeJS使用jQuery选择器操作DOM
2015/02/13 NodeJs
js实现简单的验证码
2015/12/25 Javascript
页面向下滚动ajax获取数据的实现方法(兼容手机)
2016/05/24 Javascript
Node.js中process模块常用的属性和方法
2016/12/13 Javascript
nodejs中解决异步嵌套循环和循环嵌套异步的问题
2017/07/12 NodeJs
JavaScript使用prototype属性实现继承操作示例
2020/05/22 Javascript
[50:02]完美世界DOTA2联赛PWL S2 Magma vs FTD 第三场 11.29
2020/12/03 DOTA
python 搭建简单的http server,可直接post文件的实例
2019/01/03 Python
一篇文章弄懂Python中的可迭代对象、迭代器和生成器
2019/08/12 Python
springboot配置文件抽离 git管理统 配置中心详解
2019/09/02 Python
pytorch数据预处理错误的解决
2020/02/20 Python
使用Python将图片转正方形的两种方法实例代码详解
2020/04/29 Python
高考考python编程是真的吗
2020/07/20 Python
新加坡航空官方网站:Singapore Airlines
2016/10/13 全球购物
领导的自我鉴定
2013/12/28 职场文书
实习单位接收函
2014/01/11 职场文书
人事专员工作职责
2014/02/22 职场文书
民主生活会对照检查材料
2014/09/22 职场文书
环境工程专业毕业生求职信
2014/09/30 职场文书
篮球友谊赛通讯稿
2014/10/10 职场文书
2014年工作总结与下年工作计划
2014/11/27 职场文书
工程质量保证书
2015/05/09 职场文书
《打电话》教学反思
2016/02/22 职场文书