【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱: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编程(类的释放)相关推荐

  1. python 儿童 游戏_儿童编程教学 – 推荐几款Python编程类游戏

    自学过编程的小伙伴都知道,在学习的过程中,不仅仅要记下很多的知识点,而且那些知识点,都是非常的干,很干,很干,没有一点乐趣的感觉-.. 所以在很多人学习 在玩游戏的过程中就能学习到编程的网站! 支持多 ...

  2. 推荐几款Python编程类游戏,妈妈再也不用担心我的学习了

    自学过编程的小伙伴都知道,在学习的过程中,不仅仅要记下很多的知识点,而且那些知识点,都是非常的干,很干,很干,没有一点乐趣的感觉..... 所以在很多人学习Python的人,也许他的基础知识还没有学好 ...

  3. 翻译Python编程无师自通——专业程序员的养成

    这本书在 畅销Python编程类入门书,美国亚马逊Kindle编程类排行榜榜一. 开始初学python,也有不少书了,不想在白花钱(买了就放那里不看了),看一个英文文档的原著,准备每天翻译一点,放到b ...

  4. python的简单程序代码_小白学编程?从一个简单的程序开始学习Python编程

    笔者思虑再三还是决定选择图文(因为百家的视频发布画质真不怎么样[囧]). 笔者学习编程的时间也挺长的,因为业余,因为时间不多,各种原因,自学编程的路特别难走.然后笔者发现,自己能为小白贡献一些力量,然 ...

  5. 你的私人编程老师,ChatGPT帮你快速掌握Python编程

    ChatGPT为我们提供了一种全新的学习方式,让你可以更轻松,更快速地学习编程知识. 以下是ChatGPT帮助用户学习编程的优势: 推荐资源和课程ChatGPT可以根据您的编程经验和学习目标,推荐适合 ...

  6. 《Python 编程从入门到实践》———— 创建和使用类

    创建类  面向对象技术简介 类(Class): 用来描述具有相同的属性和方法的对象的集合.它定义了该集合中每个对象所共有的属性和方法.对象是类的实例. 方法:类中定义的函数. 类变量:类变量在整个实例 ...

  7. 爬虫python书籍-Python爬虫案例:抓取豆瓣编程类高评分书籍

    对于很多正在学习计算机的朋友来说,选择合适的学习材料是非常重要的. 本文将通过 Python 来爬取豆瓣编程类评分大于 9.0 的书籍. 此案例很适合入门爬虫的朋友学习,总共也就 3 个函数. 下图是 ...

  8. python定义类_提升你的Python编程能力,细说类的继承,拿走不谢

    今天咱们聊点啥呢?要不还是聊点Python基础的东东吧,大家已经都知道啦,Python呢是一种面向对象的脚本编程语言,那面向对象的编程语言呢,都会支持面向对象的三大特性,你知道是哪三大特性吗?当然是咱 ...

  9. css不继承父类样式_提升你的Python编程能力,细说类的继承,拿走不谢

    今天咱们聊点啥呢?要不还是聊点Python基础的东东吧,大家已经都知道啦,Python呢是一种面向对象的脚本编程语言,那面向对象的编程语言呢,都会支持面向对象的三大特性,你知道是哪三大特性吗?当然是咱 ...

  10. python 类和对象_面向对象的编程思想和Python的类,访问和属性,继承

    面向对象的编程思想和Python的类,类的方法和属性,实例方法这一文从面向对象的角度,介绍类的定义,类的属性和自定义方法. 本文将从访问限制,属性,继承,方法重写这几个方面继续介绍面向对象的编程思想和 ...

最新文章

  1. platform平台工作原理
  2. thinkphp查询
  3. dows 性能监控软件 Spotlight On Windows
  4. python 基础 7.6 sys 模块
  5. Android数据库专家秘籍(七)经验LitePal查询艺术
  6. Tomcat 的 catalina.out 日志分割
  7. epoll与select区别
  8. AngularJS之ng-class(十一)
  9. 02使用常规步骤编译NanoPiM1Plus的Android4.4.2
  10. 【codevs30521022】多米诺覆盖,二分图
  11. 《SEO的艺术(原书第2版)》——3.11 为意识形态影响力开展SEO
  12. BZOJ2366 : 多重历史
  13. 论文笔记_S2D.42_2018-CRV_为经典图像处理辩护:在CPU上的快速深度补全
  14. Google Exoplayer之全面认识
  15. QQ上最牛的离线留言消息
  16. 2018:视频标准混战的元年序幕
  17. #MAXScript学习# 1批量导出fbx
  18. ElasticSearch 图片搜索插件 (一)
  19. openerp换mysql_OpenERP 源码变更后数据库升级
  20. autoware.auto安装教程

热门文章

  1. 5月8日——iOS中的3D Touch效果
  2. VMware虚拟机Bridged(桥接模式)
  3. CSS-滤镜 -webkit-filter
  4. Hive之 hive的三种使用方式(CLI、HWI、Thrift)
  5. 对《技术人员,你拿什么拯救你的生活----温水煮青蛙》的一点看法
  6. cocos-creator 脚本逻辑-2
  7. bzoj 1492: [NOI2007]货币兑换Cash
  8. 初入前端框架bootstrap--Web前端
  9. Only Link: Inheritance — private and protected inheritance in c++
  10. Winform用Post方式打开IE