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 timeclass A():def __init__(self):print '__init__'def __del__(self):print '__del__'a=A()cnt = 0
while True:time.sleep()cnt += 1print cnt
实验表明,在循环之前不会有del的相关打印。这说明,del函数调用是由虚拟机决定的。del发生的时间决定与虚拟机的垃圾回收机制。
3、显式删除
既然不清楚什么时候删除变量,那么我们可以用del这个命令来删除,效果是一样的。
import timeclass A():def __init__(self):print '__init__'def __del__(self):print '__del__'a=A()
del acnt = 0
while True:time.sleep()cnt += 1print cnt
通过实验,我们发现del在循环之前确实被调用了,相关的打印也可以在终端清楚地看出来。这说明del会强制class内存被释放,且这应该是一个阻塞的动作。
4、类成员变量
另外,我们可以看一下类作为成员变量的时候,大约在什么时候会调用__del__,
#!/usr/bin/pythonimport os
import sys
import reclass A():def __init__(self):passdef __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编程(类的释放)相关推荐
- python 儿童 游戏_儿童编程教学 – 推荐几款Python编程类游戏
自学过编程的小伙伴都知道,在学习的过程中,不仅仅要记下很多的知识点,而且那些知识点,都是非常的干,很干,很干,没有一点乐趣的感觉-.. 所以在很多人学习 在玩游戏的过程中就能学习到编程的网站! 支持多 ...
- 推荐几款Python编程类游戏,妈妈再也不用担心我的学习了
自学过编程的小伙伴都知道,在学习的过程中,不仅仅要记下很多的知识点,而且那些知识点,都是非常的干,很干,很干,没有一点乐趣的感觉..... 所以在很多人学习Python的人,也许他的基础知识还没有学好 ...
- 翻译Python编程无师自通——专业程序员的养成
这本书在 畅销Python编程类入门书,美国亚马逊Kindle编程类排行榜榜一. 开始初学python,也有不少书了,不想在白花钱(买了就放那里不看了),看一个英文文档的原著,准备每天翻译一点,放到b ...
- python的简单程序代码_小白学编程?从一个简单的程序开始学习Python编程
笔者思虑再三还是决定选择图文(因为百家的视频发布画质真不怎么样[囧]). 笔者学习编程的时间也挺长的,因为业余,因为时间不多,各种原因,自学编程的路特别难走.然后笔者发现,自己能为小白贡献一些力量,然 ...
- 你的私人编程老师,ChatGPT帮你快速掌握Python编程
ChatGPT为我们提供了一种全新的学习方式,让你可以更轻松,更快速地学习编程知识. 以下是ChatGPT帮助用户学习编程的优势: 推荐资源和课程ChatGPT可以根据您的编程经验和学习目标,推荐适合 ...
- 《Python 编程从入门到实践》———— 创建和使用类
创建类 面向对象技术简介 类(Class): 用来描述具有相同的属性和方法的对象的集合.它定义了该集合中每个对象所共有的属性和方法.对象是类的实例. 方法:类中定义的函数. 类变量:类变量在整个实例 ...
- 爬虫python书籍-Python爬虫案例:抓取豆瓣编程类高评分书籍
对于很多正在学习计算机的朋友来说,选择合适的学习材料是非常重要的. 本文将通过 Python 来爬取豆瓣编程类评分大于 9.0 的书籍. 此案例很适合入门爬虫的朋友学习,总共也就 3 个函数. 下图是 ...
- python定义类_提升你的Python编程能力,细说类的继承,拿走不谢
今天咱们聊点啥呢?要不还是聊点Python基础的东东吧,大家已经都知道啦,Python呢是一种面向对象的脚本编程语言,那面向对象的编程语言呢,都会支持面向对象的三大特性,你知道是哪三大特性吗?当然是咱 ...
- css不继承父类样式_提升你的Python编程能力,细说类的继承,拿走不谢
今天咱们聊点啥呢?要不还是聊点Python基础的东东吧,大家已经都知道啦,Python呢是一种面向对象的脚本编程语言,那面向对象的编程语言呢,都会支持面向对象的三大特性,你知道是哪三大特性吗?当然是咱 ...
- python 类和对象_面向对象的编程思想和Python的类,访问和属性,继承
面向对象的编程思想和Python的类,类的方法和属性,实例方法这一文从面向对象的角度,介绍类的定义,类的属性和自定义方法. 本文将从访问限制,属性,继承,方法重写这几个方面继续介绍面向对象的编程思想和 ...
最新文章
- platform平台工作原理
- thinkphp查询
- dows 性能监控软件 Spotlight On Windows
- python 基础 7.6 sys 模块
- Android数据库专家秘籍(七)经验LitePal查询艺术
- Tomcat 的 catalina.out 日志分割
- epoll与select区别
- AngularJS之ng-class(十一)
- 02使用常规步骤编译NanoPiM1Plus的Android4.4.2
- 【codevs30521022】多米诺覆盖,二分图
- 《SEO的艺术(原书第2版)》——3.11 为意识形态影响力开展SEO
- BZOJ2366 : 多重历史
- 论文笔记_S2D.42_2018-CRV_为经典图像处理辩护:在CPU上的快速深度补全
- Google Exoplayer之全面认识
- QQ上最牛的离线留言消息
- 2018:视频标准混战的元年序幕
- #MAXScript学习# 1批量导出fbx
- ElasticSearch 图片搜索插件 (一)
- openerp换mysql_OpenERP 源码变更后数据库升级
- autoware.auto安装教程
热门文章
- 5月8日——iOS中的3D Touch效果
- VMware虚拟机Bridged(桥接模式)
- CSS-滤镜 -webkit-filter
- Hive之 hive的三种使用方式(CLI、HWI、Thrift)
- 对《技术人员,你拿什么拯救你的生活----温水煮青蛙》的一点看法
- cocos-creator 脚本逻辑-2
- bzoj 1492: [NOI2007]货币兑换Cash
- 初入前端框架bootstrap--Web前端
- Only Link: Inheritance — private and protected inheritance in c++
- Winform用Post方式打开IE