全部博文(2759)
分类:
2012-08-29 03:25:51
原文地址:Python 中循环引用导致内存泄漏 作者:laoliulaoliu
——献给那些有内存泄漏相伴的日子
事实证明,写程序是一件非常好玩的事情。
我曾经尝试过靠自己勤劳的双手来封装 Python 的扩展模块(不使用工具),但是我很明智地发现也许以我的智商可能无法来很好地管理那些强的或是弱的引用计数……于是我动摇了。
动摇的结果是:我开始使用 SWIG 来做这件事情。
我心中的一个声音在风雨交加的夜空中高喊着:再见了,怎么删也删不掉的内存;还有那些没有删就自动消失的意外内存……
好了,让我们再次回到那个“自动垃圾收集时代”的著名笑话吧……
>>> class LeakTest(object):不错,这就是我们逃难到 Python 的原因,垃圾总是会自动地消失得无影无踪。然后……
>>> A = LeakTest()也就是说,在指针 A、B 移情别恋时其原来所指向的内存却没有消失。原因是在 "A = None" 时,因为
A.b 还指着 B ,所以 A 所指的对象还不能删除。同理,因为原来 A 所指的对象还在,所以因为 "B.a = A" 的缘故,对象 B 也不能删除。
这时 A 和 B 已经为 None ,于是产生了一处内存泄漏。
初略想想,想让 Python 内存泄漏似乎比 C/C++ 还快呢(千万不要写 self.xxx = self)。
最后写一个带作用域的作为结束,以博诸公一笑。
>>> def foo():