Python的垃圾回收机制

本网站用的阿里云ECS,推荐大家用。自己搞个学习研究也不错

在Python中,一切对象都是引用计数的。当分配一个新的名字给一个对象,或将其放到一个列表、远足或字典中时,这个对象的引用计数就会增加1。如:

    a = 2 #在内存中创建一个对象‘2’,并把名字a指向该对象,该对象的引用计数为1

    b = a #引用计数加1,为2

    del a #删除a的引用,此时引用计数为1

当‘2’的引用计数为0的时候,他会在适当的时机被Python的垃圾回收机制回收。

  但在特定的情况(循环引用)下,会阻止垃圾回收机制销毁不再使用的对象,如:

    a={} #引用为1

    b={} #引用为1

    a[‘b’]=b #b的引用加1,为2

    b[‘a’]=a #a的引用加1,位2

    del a #删除a,a的引用为1

    del b #删除b,b的引用为1

在这个例子中,del语句减少了a和b的引用计数并删除了用于引用的变量名,可是由于两个对象各包含一个对方的引用,虽然最后两个对象都无法通过名字访问,但引用计数并没有减为0。因此不会被销毁,会一直保留在内存中,造成内存泄漏。

    为解决这个问题,python解释器会定期运行一个搜索器,若发现一个对象已经无法被访问,无论该对象引用计数是否为0,都销毁他。

CentOS上源码安装Python3.4  http://www.linuxidc.com/Linux/2015-01/111870.htm

《Python核心编程 第二版》.(Wesley J. Chun ).[高清PDF中文版] http://www.linuxidc.com/Linux/2013-06/85425.htm

《Python开发技术详解》.( 周伟,宗杰).[高清PDF扫描版+随书视频+代码] http://www.linuxidc.com/Linux/2013-11/92693.htm

Python脚本获取Linux系统信息 http://www.linuxidc.com/Linux/2013-08/88531.htm

Ubuntu下用Python搭建桌面算法交易研究环境 http://www.linuxidc.com/Linux/2013-11/92534.htm

Python 语言的发展简史 http://www.linuxidc.com/Linux/2014-09/107206.htm

Python 的详细介绍请点这里
Python 的下载地址请点这里

未经允许不得转载:演道网 » Python的垃圾回收机制

赞 (0)
分享到:更多 ()

评论 0

评论前必须登录!

登陆 注册