Форум сайта python.su
Всем привет! Начитался материалов по утечке памяти, хотел смоделировать простой пример, чтобы потрогать Garbage Collector в деле, для общего развития так сказать.
Написал код (P 3.6 (Си)), который как я понял, должен мне выводить непустой gc.garbage, а у меня он пустой, как я не стараюсь… Что я сделал не так? Как увидеть что-нибудь в gc.garbage?
p/s если раскомментировать/закомментировать строчку #del itemall , то вывод в output разный, что наталкивает на предположение, что объекты должны быть в gc.garbage, но там пусто… Запускаю в PyCharm
import gc class First: def __init__(self, value=None): self.link = value def __del__(self): del self.link print("FIRST __del__") def set_value(self, value=None): self.link = value class Second: def __init__(self, value=None): self.link = [] self.link.append(value) value.set_value(self) def __del__(self): del self.link print("SECOND __del__") def add_value(self, value=None): self.link.append(value) value.set_value(self) item1 = First() item2 = First() item3 = First() item4 = First() itemall = Second(item1) itemall.add_value(item2) itemall.add_value(item3) itemall.add_value(item4) del item1 del item2 del item3 del item4 #del itemall print("="*50 + "\n") print("start gc.collect(): ... ") print(" ... return: " + str(gc.collect())) print(gc.garbage) print("****** END ****** " * 5 + "\n")
Отредактировано clipper1995 (Авг. 15, 2018 13:30:35)
Офлайн
Starting with Python 3.4, this list should be empty most of the time, except when using instances of C extension types with a non-NULL tp_del slot.Вы ничего там не видите наверняка потому что мусор уже вычищен.
Офлайн
JOHN_16Запустил на 2.7, -
Оф дока
del item1 del item2 del item3 del item4 del itemall
Офлайн