python __del__() 清空对象

python垃圾回收机制:当一个对象的引用被完全清空之后,就会调用__del__()方法来清空这个对象

当对象的引用没有被完全清空时,代码如下:

class C():
def __init__(self):
print('调用构造器创建对象') def __del__(self):
print('销毁创建的对象') c1 = C()
c2 = c1
c3 = c1 print('=====================================')
print(str(id(c1)) +' , '+ str(id(c2)) +' , '+ str(id(c3)))
print('=====================================')
del c1
del c2
# del c3 先保留c3,不完全删除C()的引用 # print(c1) 不注释的话会报错:NameError: name 'c1' is not defined
# print(c2) 不注释的话会报错:NameError: name 'c2' is not defined
print(c3) # 输出:<__main__.C object at 0x0000023444AF0AC0> print('=====================================')
while True:
time.sleep(2)
print('循环中.......')

输出结果: 下面的输出结果里面没有显示 “销毁创建的对象”

调用构造器创建对象
=====================================
2423513877184 , 2423513877184 , 2423513877184
=====================================
<__main__.C object at 0x0000023444AF0AC0>
=====================================
循环中.......
循环中.......
循环中.......
循环中.......

当对象的引用完全被清空时,代码如下:

class C():
def __init__(self):
print('调用构造器创建对象') def __del__(self):
print('销毁创建的对象') c1 = C()
c2 = c1
c3 = c1 print('=====================================')
print(str(id(c1)) +' , '+ str(id(c2)) +' , '+ str(id(c3)))
print('=====================================')
del c1
del c2
del c3 #已经将对象的引用全部删除,程序会自动调用 __del__方法 # print(c1) 不注释的话会报错:NameError: name 'c1' is not defined
# print(c2) 不注释的话会报错:NameError: name 'c2' is not defined
# print(c3) 不注释的话会报错:NameError: name 'c3' is not defined print('=====================================')
while True:
time.sleep(2)
print('循环中.......')

输出结果:

调用构造器创建对象
=====================================
2873013504704 , 2873013504704 , 2873013504704
=====================================
销毁创建的对象
=====================================
循环中.......
循环中.......
循环中.......
循环中.......

python __del__() 清空对象的更多相关文章

  1. python 的面相对象编程--对应c++

    在python的面相对象编程中,我们常常在class中可以看到a(),  _b() ,  __c(), __d()__这样的函数. 由于我是看廖雪峰老师的教程,廖老师为了简单起见,没有引入太多概念,我 ...

  2. python基础——获取对象信息

    python基础——获取对象信息 当我们拿到一个对象的引用时,如何知道这个对象是什么类型.有哪些方法呢? 使用type() 首先,我们来判断对象类型,使用type()函数: 基本类型都可以用type( ...

  3. python 引用和对象理解

    今天浏览博客的时候看到这么一句话: python中变量名和对象是分离的:最开始的时候是看到这句话的时候没有反应过来.决定具体搞清楚一下python中变量与对象之间的细节.(其实我感觉应该说 引用和对象 ...

  4. python __del__

    python __del__ 转自:http://blog.csdn.net/bbdxf/article/details/25774763 最近学习<Python参考手册>学到Class部 ...

  5. Python深入03 对象的属性

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! Python一切皆对象(object),每个对象都可能有多个属性(attribut ...

  6. Python的基础--对象 转

      对象(Objects)是python中数据的抽象,python中所有的数据均可以用对象或者是对象之间的关系来表示.每个对象均有标识符(identity).类型(type).值(value). 标识 ...

  7. Python可迭代对象、迭代器和生成器

    Python可迭代对象.迭代器和生成器 python 函数 表达式 序列 count utf-8 云栖征文 python可迭代对象 python迭代器 python生成器 摘要: 8.1 可迭代对象( ...

  8. Python的基础--对象

    对象(Objects)是python中数据的抽象,python中所有的数据均可以用对象或者是对象之间的关系来表示.每个对象均有标识符(identity).类型(type).值(value). 标识符. ...

  9. Python一切皆对象

    Python从设计之初就是一门面向对象的语言,它有一个重要的概念,即一切皆对象. Java虽然也是面向对象编程的语言,但是血统没有Python纯正.比如Java的八种基本数据类型之一int,在持久化的 ...

  10. python引用和对象详解

    python引用和对象详解 @[马克飞象] python中变量名和对象是分离的 例子 1: a = 1 这是一个简单的赋值语句,整数 1 为一个对象,a 是一个引用,利用赋值语句,引用a指向了对象1. ...

随机推荐

  1. Redis 常用的数据结构简介与实例测试【Redis 系列二】

    〇.都有哪些数据结构? Redis 提供了较为丰富的数据类型,常见的有五种:String(字符串),Hash(哈希),List(列表),Set(集合).Zset(有序集合). 随着 Redis 版本的 ...

  2. k8s数据持久化

    前面的学习,我们已经基本完成了在k8s中部署一个web服务,运行pod.创建service.创建ingress对外提供域名的七层代理. 下一个环境就得去关注应用部署后的数据存储问题,容器化如何管理,k ...

  3. Java原子操作保证方案

    引言 原子操作是指不会被线程调度机制打断的操作:这种操作一旦开始,就一直运行到结束,中间不会有任何 context switch (切换到另一个线程).通常所说的原子操作包括对非long和double ...

  4. windows powershell 解压 .gz文件

    windows 10下解压.gz后缀文件 打开windows powershell界面,(1)输入cd desktop(文件的存储位置,示例为存储在电脑桌面上), (2)输入tar -zxvf 需要解 ...

  5. Linux下安装PHP环境

    Tips:当你看到这个提示的时候,说明当前的文章是由原emlog博客系统搬迁至此的,文章发布时间已过于久远,编排和内容不一定完整,还请谅解` Linux下安装PHP环境 日期:2018-5-7 阿珏 ...

  6. hbck2的一些用法

    一.执行 hbase org.apache.hbase.HBCK2 可以看到下面一些选择项 **示例: -d 打印debug日志 -s 跳过客户端与服务端一致性的版本检测 hbase org.apac ...

  7. 保护您的Web应用:使用雷池(SafeLine)WAF的入门指南

    雷池(SafeLine)是长亭科技耗时近 10 年倾情打造的 WAF,核心检测能力由智能语义分析算法驱动.旨在提供卓越的安全保护.本文将带您一步步了解如何安装.配置和测试SafeLine,以及如何利用 ...

  8. 实训day2

    HTML基本介绍 编辑网页的语言,超文本标记语言,是迄今为止网络上应用最为广泛的语言,也是抱成网页文档的主要语言.HTML文本是由HTML命令组成的描述性文本,HTML命令可以说明文字.图形.动画.声 ...

  9. vim 中代码的折叠和打开

    # vim 中代码的折叠和打开 reference: vim中代码的折叠和打开(有删改) https://www.cnblogs.com/xuxm2007/archive/2011/11/10/224 ...

  10. Coap 协议学习:1-有关概念

    COAP协议简介 不像人接入互联网的简单方便,由于物联网设备大多都是资源限制型的,有限的CPU.RAM.Flash.网络宽带等.对于这类设备来说,想要直接使用现有网络的TCP和HTTP来实现设备实现信 ...