什么是周期?与python有关

时间:2009-11-05 18:38:08

标签: python cycle

我使用奇妙的eric4 ide来编写python代码,它有一个内置的工具叫做'cyclops',它显然正在寻找周期。运行之后,它给了我一堆大胆的红色字母,声明我的代码中有很多循环。问题是输出几乎难以理解,我无法通过读取输出来理解循环是什么。我已经浏览了几个小时的网络,似乎找不到博客文章。当循环堆积到某一点时,分析器和调试器停止工作:(。

我的问题是什么是循环,我怎么知道我什么时候制作一个循环,我如何避免在python中制作循环。感谢。

2 个答案:

答案 0 :(得分:4)

循环(或“引用循环”)是两个或多个彼此引用的对象,例如:

alist = []
anoth = [alist]
alist.append(anoth)

class Child(object): pass

class Parent(object): pass

c = Child()
p = Parent()
c.parent = p
p.child = c

当然,这些是非常简单的例子,只有两个项目的周期;现实生活中的例子往往更长,更难以发现。没有神奇的子弹告诉你,你只是做了一个周期 - 你只需要注意它。 gc模块(其特定工作是垃圾收集无法访问的周期)可以帮助您诊断现有周期(当您设置适当的调试标志时)。 weakref模块可以帮助您避免构建周期,当您需要(例如)孩子和父母相互了解而不创建参考周期时(只需将两个相互引用中的一个引入弱引用或代理) ,或使用模块提供的方便的弱字典容器。

答案 1 :(得分:1)

所有Cyclops都会告诉您代码中是否有通过一系列其他对象引用自己的对象。这曾经是python中的一个问题,因为垃圾收集器不能正确处理这些类型的对象。从那以后,这个问题在很大程度上是固定的。

结论:如果你没有观察到内存泄漏,在大多数情况下你都不必担心Cyclops的输出。