python编程(类的释放)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】
大多数的脚本语言都是由虚拟机来安排内存释放的。所以,这些语言一本只要申请内存使用,不需要手工去释放它们。那它们是什么时候被释放的,其实我们可以自己做几个实验看看。
1、单个变量
我们知道python语言下面,类释放的时候会调用del这个函数,所以只要在这个函数里面添加一些消息就可以了。
class A():
def __init__(self):
print '__init__'
def __del__(self):
print '__del__'
a=A()
这几行代码比较简单,几乎输完命令的同时就结束了。结果也是很清楚的,出现了init和del的打印。这说明虚拟机在执行结束的时候确实是调用了del函数的。
2、添加循环
为了增加复杂性,可以在原有代码后面增加一些循环,这样可以看看循环发生之前虚拟机是否会调用del函数。
import time
class A():
def __init__(self):
print '__init__'
def __del__(self):
print '__del__'
a=A()
cnt = 0
while True:
time.sleep()
cnt += 1
print cnt
实验表明,在循环之前不会有del的相关打印。这说明,del函数调用是由虚拟机决定的。del发生的时间决定与虚拟机的垃圾回收机制。
3、显式删除
既然不清楚什么时候删除变量,那么我们可以用del这个命令来删除,效果是一样的。
import time
class A():
def __init__(self):
print '__init__'
def __del__(self):
print '__del__'
a=A()
del a
cnt = 0
while True:
time.sleep()
cnt += 1
print cnt
通过实验,我们发现del在循环之前确实被调用了,相关的打印也可以在终端清楚地看出来。这说明del会强制class内存被释放,且这应该是一个阻塞的动作。
4、类成员变量
另外,我们可以看一下类作为成员变量的时候,大约在什么时候会调用__del__,
#!/usr/bin/python
import os
import sys
import re
class A():
def __init__(self):
pass
def __del__(self):
print 'a'
class B():
def __init__(self):
self.a = A()
def process():
b = B()
def main():
process()
print 'b'
if __name__ == '__main__':
main()
通过实验结果,我们发现其实在process函数快结束的时候,‘a’就打印出来了。这说明每一次函数结束的时候,对于临时创建的变量,虚拟机都会显式调用__del__函数的。
5、使用注意
目前为止,我在使用python的时候还没有显示遇到内存方面的问题。唯一的经验,就是对于大量的业务数据空间,要及时del掉。这样可以del时间均匀地分配到每一个业务中去,防止后面的delay时间过长,仅此而已。如果大家有什么好的想法和做法,也欢迎多多交流。
相关文章
- Python中的字典dict
- python与C++的效率区别、模型部署/ONNXRuntime/tensorrt
- inux怎么查看python包版本及位置
- Python isinstance() 函数/Python setattr() 函数/Python getattr() 函数
- 【华为OD机试真题 python】 约瑟夫问题【2022 Q4 | 100分】
- python中将嵌套列表展开
- Python爬虫需要学多久才能掌握?
- 155 python网络编程 - listen的队列长度
- 140 python网络编程 - socket简介
- 机器人系统设计与制作:Python语言实现1.2 机器人从哪儿来
- Linux 平台下 Python 脚本编程入门(二)
- 少儿学编程系列---使用python turtle画熊猫
- Python编程-基础知识-条件判断
- 《Python极客项目编程 》——1.4 完整代码
- 《Python编程快速上手——让繁琐工作自动化》——2.11 习题
- 《Python核心编程(第3版)》——1.3 正则表达式和Python语言
- 《Python Cookbook(第3版)中文版》——6.13 数据汇总和统计
- 《Python编程初学者指南》——第1章 启程:Game Over程序 1.1 剖析Game Over程序
- 《Python核心编程(第二版)》——1.6 Python文档
- 《Python数据可视化编程实战》—— 1.2 安装matplotlib、Numpy和Scipy库
- 数据科学必备Python使用Pandas数据合并处理
- Python获取压缩文件密码,只要一分钟!
- Python学习---网页爬虫[下载图片]
- python量化笔记16之夏普比率计算公式