我只是想确保我理解https://docs.python.org/2/extending/extending.html#reference-counts:
我有两个类(出于某些目的必须互相引用):
class Foo(object):
def __init__(self, child):
self._child = child
self._child.parent = self
@property
def child(self)
return self._child
@child.setter
def child(self, value):
#Optional to delete reference to parent
'''
self._child.parent = None
'''
self._child = value
self._child.parent = self
class Child(object):
@property
def parent(self):
return self._parent
@parent.setter
def parent(self, value)
self._parent = value
在设置一个新孩子之前,我是否需要制作self._child.parent = None
以便旧孩子可以接受?我对以上链接的引用感到非常不知所措,这个案例是我不确定的。直到现在我发现的所有内容都描述了删除两个元素并且它们彼此指向的情况。
答案 0 :(得分:1)
在这种情况下你不必设置self._child.parent = None
,不。您已经通过将子对象的父引用设置为其他内容来打破圆圈。
当参考到子对象消失时,圆圈被破坏,对象可以被正常的引用计数机制删除;它本身仍有传出引用并不重要。
即使有循环引用,垃圾收集器也会通过破坏圆圈中的一个引用来处理圆圈。唯一需要考虑的问题是圆圈中的一个对象是否具有自定义__del__
方法。