如何在Python中强制垃圾回收中的命令?

时间:2018-07-11 14:56:32

标签: python garbage-collection

在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) 

为什么引用不首先强制垃圾回收任务?如何强制首先对上下文进行垃圾收集?

如何解释参考文献数量?

0 个答案:

没有答案