什么是周期?关于python

什么是周期?关于python,python,cycle,Python,Cycle,我正在使用神奇的ide编写python代码,它内置了一个名为“cyclops”的工具,显然是在寻找周期。在运行它之后,它会给我一大堆粗体的红色字母,声明我的代码中有大量的循环。问题是输出几乎是无法理解的,我不可能通过读取它的输出来理解循环是什么。我在网上浏览了几个小时,似乎连一篇博文都找不到。当循环累积到某一点时,探查器和调试器停止工作:( 我的问题是什么是循环,我如何知道我在做循环,如何避免在python中做循环。谢谢。所有Cyclops告诉你的是代码中是否有对象通过一系列其他对象引用自己。这

我正在使用神奇的ide编写python代码,它内置了一个名为“cyclops”的工具,显然是在寻找周期。在运行它之后,它会给我一大堆粗体的红色字母,声明我的代码中有大量的循环。问题是输出几乎是无法理解的,我不可能通过读取它的输出来理解循环是什么。我在网上浏览了几个小时,似乎连一篇博文都找不到。当循环累积到某一点时,探查器和调试器停止工作:(


我的问题是什么是循环,我如何知道我在做循环,如何避免在python中做循环。谢谢。

所有Cyclops告诉你的是代码中是否有对象通过一系列其他对象引用自己。这在python中曾经是个问题,因为垃圾收集器不会处理这些类型的循环这个问题在很大程度上已经得到了解决

一句话:如果您没有观察到内存泄漏,那么在大多数情况下,您不必担心Cyclops的输出。

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

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


当然,这些都是非常简单的例子,周期只有两个项目;现实生活中的例子通常更长、更难发现。没有什么灵丹妙药告诉你,你只是做了一个周期——你只需要注意它。该模块(其具体工作是垃圾收集无法到达的周期)可以帮助你诊断现有的周期(当您设置适当的调试标志时)。当您确实需要(例如)子级和父级相互了解而无需创建引用循环时,该模块可以帮助您避免构建循环(仅将两个相互引用中的一个引用创建为弱引用或代理,或使用模块提供的方便的弱字典容器).

谢谢Alex,我现在明白了,还有一个问题,weakref是让孩子和父母知道彼此存在的唯一方法吗?@spearfire,不,有很多方法——你可以决定创建一个循环;或者,你可以将所有实体放入一个dict,每个实体都有一个唯一的键,并让其他实体将这些键放入该dict中(只有在检查了密钥仍然存在后才能使用!-)而不是直接引用实体——以及其他许多方式。感谢Silas,cyclops是垃圾,只要我不引用引用它们的东西。
class Child(object): pass

class Parent(object): pass

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