在Python中,我不了解垃圾回收中的顺序。
让我们以两个对象为例:一个上下文和一个任务。该任务保留对上下文的引用。我以为应该先删除任务,但是我错了。
您可以通过以下代码看到它:
import gc
class Context:
def __init__(self):
self.ptr = 2
def __del__(self):
print("remove context (ctx refs: %d)" % len(gc.get_referrers(self)))
class Task:
def __init__(self, ctx):
self.ctx = ctx
def __del__(self):
print(self.ctx.ptr)
print("remove task (ctx refs: %d)" % len(gc.get_referrers(self.ctx)))
ctx = Context()
t1 = Task(ctx)
t2 = Task(ctx)
print("ctx refs: %d" % len(gc.get_referrers(ctx)))
给出此输出的:
ctx refs: 3
remove context (ctx refs: 2)
2
remove task (ctx refs: 0)
2
remove task (ctx refs: 0)
为什么引用不首先强制垃圾回收任务?如何强制首先对上下文进行垃圾收集?
如何解释参考文献数量?