如何获取Python垃圾回收以从定义的类中删除对象?

时间:2019-01-21 18:37:48

标签: python collections garbage

使用每秒生成数千个节点的决策树时,我无法进行垃圾回收来删除不再有用的节点。我对此很陌生,所以请帮助我了解这些示例的内容...

我知道垃圾回收会删除没有引用的对象。然后我运行了此示例代码,以验证垃圾收集是否正常工作……(改编自https://www.geeksforgeeks.org/garbage-collection-python/

import gc

def create_cycle():
    x = {}
    x[1] = x
    print(x)

create_cycle()

collected = gc.collect()
print("Garbage collector: collected {} objects.".format(collected))

此输出

{1: {...}}
Garbage collector: collected 1 objects. 

收集了一个对象。

但是,当我尝试使用Node类进行相同的实验时,它不会收集任何东西。

import gc

class Node:
    def __init__(self):
        self.x = 0

    def foo(self, number):
        self.x = number


def create_cycle():
    node_1 = Node()
    node_1.foo(3)
    print(node_1)


create_cycle()

collected = gc.collect()
print("Garbage collector: collected {} objects.".format(collected))

这将输出

<__main__.Node object at 0x0000015F640E0EF0>
Garbage collector: collected 0 objects.

收集了零个对象。我什至试图用行“ node_1 = None”显式删除所有引用。但是,那并没有改变任何东西。那么,我误会什么呢?

0 个答案:

没有答案