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实现CET查分的方法
Mar 10 Python
python提取字典key列表的方法
Jul 11 Python
实例讲解Python中SocketServer模块处理网络请求的用法
Jun 28 Python
rabbitmq(中间消息代理)在python中的使用详解
Dec 14 Python
python写入已存在的excel数据实例
May 03 Python
利用pyinstaller将py文件打包为exe的方法
May 14 Python
python 统计数组中元素出现次数并进行排序的实例
Jul 02 Python
python处理数据,存进hive表的方法
Jul 04 Python
django中SMTP发送邮件配置详解
Jul 19 Python
如何解决tensorflow恢复模型的特定值时出错
Feb 06 Python
python图片指定区域替换img.paste函数的使用
Apr 09 Python
python爬取”顶点小说网“《纯阳剑尊》的示例代码
Oct 16 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
Windows下安装Memcached的步骤说明
2010/04/25 PHP
php中截取中文字符串的代码小结
2011/07/17 PHP
PHP实现Soap通讯的方法
2014/11/03 PHP
YII框架学习笔记之命名空间、操作响应与视图操作示例
2019/04/30 PHP
怎么让脚本或里面的函数在所有图片都载入完毕的时候执行
2006/10/17 Javascript
Discuz! 6.1_jQuery兼容问题
2008/09/23 Javascript
电子商务网站上的常用的js放大镜效果
2011/12/08 Javascript
分享一个用Mootools写的鼠标滑过进度条改变进度值的实现代码
2011/12/12 Javascript
JavaScript操纵窗口的方法小结
2013/06/28 Javascript
使用jquery操作session方法分享
2015/01/22 Javascript
JavaScript添加随滚动条滚动窗体的方法
2016/02/23 Javascript
jQuery使用getJSON方法获取json数据完整示例
2016/09/13 Javascript
JSON 必知必会 观后记
2016/10/27 Javascript
浅谈vuex之mutation和action的基本使用
2017/08/29 Javascript
vue.js简单配置axios的方法详解
2017/12/13 Javascript
[01:21:58]守擂赛DOTA2第一周决赛
2020/04/22 DOTA
python判断、获取一张图片主色调的2个实例
2014/04/10 Python
用python结合jieba和wordcloud实现词云效果
2017/09/05 Python
详谈Python高阶函数与函数装饰器(推荐)
2017/09/30 Python
详解Python 多线程 Timer定时器/延迟执行、Event事件
2019/06/27 Python
torch 中各种图像格式转换的实现方法
2019/12/26 Python
Django Form设置文本框为readonly操作
2020/07/03 Python
django数据模型中null和blank的区别说明
2020/09/02 Python
纯css3实现鼠标经过图片显示描述的动画效果
2014/09/01 HTML / CSS
瑞典时尚服装购物网站:Miinto.se
2017/10/30 全球购物
在子网210.27.48.21/30种有多少个可用地址?分别是什么?
2014/07/27 面试题
大学生村官典型材料
2014/01/12 职场文书
同学聚会老师邀请函
2014/01/28 职场文书
活动宣传策划方案
2014/05/23 职场文书
五心教育心得体会
2014/09/04 职场文书
工作失误检讨书(3篇)
2014/10/11 职场文书
2015年幼儿园中班开学寄语
2015/05/27 职场文书
pytorch 使用半精度模型部署的操作
2021/05/24 Python
一篇文章带你了解Python和Java的正则表达式对比
2021/09/15 Python
Windows Server 2016 配置 IIS 的详细步骤
2022/04/28 Servers
Li list-style-image 图片垂直居中实现方法
2023/05/21 HTML / CSS