关于python循环引用的问题

最近初学python,发现这个问题让我很头大。不引用吧,很多时候逻辑上又需要。
google了一下,n多帖子只在说循环引用导致内存泄露,也没说个解决方法。哪位大哥能指点一下呢....
[b]问题补充:[/b]
感谢RednaxelaFX的解释.
循环引用的对象如果应该死掉的话,迟早会死的.这个我不太理解.两个对象引用计数都不为0,按网上说的就是释放不掉了.貌似python gc也不象java那样能处理孤岛.
另外我能不能再问下,如果是两个文件相互import会有什么不好的后果呢.
实在感谢~~~

Python的标记-清除式GC就是用来清理孤岛的……它不会理会引用计数的多少,但因为它可能带来比较长的停顿时间,所以在Python里只是作为备份使用;它要处理的对象显然都是“应该死掉”但引用计数尚未降为0的对象,因为如果应用技术已经为0,那么那个对象就已经“死”了。事实上很多Java虚拟机里也有用到标记-清除算法。
“网上说释放不掉”……这里也是“网上”,而我也有忽悠人的可能。楼主请多依靠自己的判断力。 =v=
如果你想深入点去了解,阅读源码是种有效的手段。《Python源码剖析》一书的16.3讲解了Python对循环引用的垃圾收集,可以配合源码阅读。

至于模块间循环import,其实只要引用了“另外一边”的代码都只出现在函数或者方法里,就没啥问题;顶层代码在import过程中会被执行,循环import可能会在这里出问题。

首先你在觉得会有循环引用,而且不在意对象存活问题的时候,可以试试弱引用([url=http://docs.python.org/library/weakref.html]weakref[/url])。它是引用,但它不像一般引用(也就是“强引用”)那样会保持对象存活。

其次,Python(指C实现的官方版本)的内存管理是引用计数为主,加上备份用的标记-清除式GC来检测循环引用,所以其实存在循环引用的对象如果应该死掉的话,迟早会死的……只是不会立即死掉而已。

受到循环引用影响的应该是__del__函数,如果循环引用的话想在__del__就得不到调用。所以在设计时应该避免