使用每秒生成数千个节点的决策树时,我无法进行垃圾回收来删除不再有用的节点。我对此很陌生,所以请帮助我了解这些示例的内容...
我知道垃圾回收会删除没有引用的对象。然后我运行了此示例代码,以验证垃圾收集是否正常工作……(改编自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”显式删除所有引用。但是,那并没有改变任何东西。那么,我误会什么呢?