Как получить сборку мусора Python для удаления объекта из моего определенного класса?

При использовании дерева решений, которое генерирует тысячи узлов в секунду, я не могу получить сборщик мусора для удаления узлов, которые больше не нужны. Я довольно новичок в этом, поэтому, пожалуйста, помогите мне понять, что происходит с этими примерами...

Я знаю, что сборщик мусора удалит объекты без ссылок. И я запустил этот пример кода, чтобы убедиться, что сборка мусора работает...(адаптировано с 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 ответов

Другие вопросы по тегам