python __del__() 清空对象
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__() 清空对象的更多相关文章
- python 的面相对象编程--对应c++
在python的面相对象编程中,我们常常在class中可以看到a(), _b() , __c(), __d()__这样的函数. 由于我是看廖雪峰老师的教程,廖老师为了简单起见,没有引入太多概念,我 ...
- python基础——获取对象信息
python基础——获取对象信息 当我们拿到一个对象的引用时,如何知道这个对象是什么类型.有哪些方法呢? 使用type() 首先,我们来判断对象类型,使用type()函数: 基本类型都可以用type( ...
- python 引用和对象理解
今天浏览博客的时候看到这么一句话: python中变量名和对象是分离的:最开始的时候是看到这句话的时候没有反应过来.决定具体搞清楚一下python中变量与对象之间的细节.(其实我感觉应该说 引用和对象 ...
- python __del__
python __del__ 转自:http://blog.csdn.net/bbdxf/article/details/25774763 最近学习<Python参考手册>学到Class部 ...
- Python深入03 对象的属性
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! Python一切皆对象(object),每个对象都可能有多个属性(attribut ...
- Python的基础--对象 转
对象(Objects)是python中数据的抽象,python中所有的数据均可以用对象或者是对象之间的关系来表示.每个对象均有标识符(identity).类型(type).值(value). 标识 ...
- Python可迭代对象、迭代器和生成器
Python可迭代对象.迭代器和生成器 python 函数 表达式 序列 count utf-8 云栖征文 python可迭代对象 python迭代器 python生成器 摘要: 8.1 可迭代对象( ...
- Python的基础--对象
对象(Objects)是python中数据的抽象,python中所有的数据均可以用对象或者是对象之间的关系来表示.每个对象均有标识符(identity).类型(type).值(value). 标识符. ...
- Python一切皆对象
Python从设计之初就是一门面向对象的语言,它有一个重要的概念,即一切皆对象. Java虽然也是面向对象编程的语言,但是血统没有Python纯正.比如Java的八种基本数据类型之一int,在持久化的 ...
- python引用和对象详解
python引用和对象详解 @[马克飞象] python中变量名和对象是分离的 例子 1: a = 1 这是一个简单的赋值语句,整数 1 为一个对象,a 是一个引用,利用赋值语句,引用a指向了对象1. ...
随机推荐
- 常用的注意力机制模块(SE、CBAM)
[深度学习]总目录 SE论文:<Squeeze-and-Excitation Networks>将重点放在了通道(channel)关系上,并提出了一种新的结构单元SE block.将SE ...
- itest(爱测试) 紧急 BUG 修复版(4.5.6)发布,,开源BUG 跟踪管理 & 敏捷测试管理&极简项目管理软件
itest 简介 itest 开源敏捷测试管理,testOps 践行者,极简的任务管理,测试管理,缺陷管理,测试环境管理4合1,又有丰富的统计分析.可按测试包分配测试用例执行,也可建测试迭代(含任务, ...
- centos7下利用qemu搭建arm模拟器
1 目的 在centos7下使用qemu搭建arm模拟器. 参考博客: centos下利用qemu搭建arm模拟器 - 寒水司天 - 博客园 (cnblogs.com) 从零使用qemu模拟器搭建ar ...
- 初入JavaScript
js是轻量级 弱类型 脚本语言 html是 超文本 标记语言 脚本语言和标记语言的主要区别 标记语言,可以通过浏览器直接执行 脚本语言,必须要通过编译,浏览器内核的编译,才能正常运行 简单理解,脚本语 ...
- work05
第一题:分析以下需求,并用代码实现 手机类Phone 属性: 品牌brand 价格price 行为: 打电话call() 发短信sendMessage() 玩游戏playGame() 要求: 1.按照 ...
- 项目管理--PMBOK 读书笔记(12)【项目采购管理】
1.采购计划三要素 1)采购管理计划:预审合格的卖方,供方选择标准: 2)采购 SOW:采购工作说明书应详细描述拟采购的产品.服务或成果: 3)采购文件 2.合同类型 1)总价合同:范围清楚, ...
- java8 多条件的filter过滤
java8 多条件的filter过滤 package com.example.core.mydemo.java; import java.io.Serializable; import java.ti ...
- CloseableHttpClient 连接超时导致XxlJob调度阻塞,影响调度任务的执行
CloseableHttpClient 连接超时导致XxlJob调度阻塞,影响调度任务的执行 问题原因1.分析日志发现,xxlJob后台界面没有执行时间和执行结果,在某一个时间点之后,某一个任务因为阻 ...
- java8 lambda Predicate示例
import java.util.Arrays; import java.util.List; import java.util.function.Predicate; public class Pr ...
- #Powerbi 1分钟学会,SUMMARIZE函数,分组汇总并新建表
今天我们来学习一个新的表函数,SUMMARIZE函数是DAX中的一个函数,它可以根据一列或多列对数据进行分组,并且可以使用指定的表达式为汇总后的表添加新列,形成一张新表. 一:基础语法 SUMMARI ...