Найти - Пользователи
Полная версия: Garbage Collector и утечка памяти.
Начало » Python для экспертов » Garbage Collector и утечка памяти.
1
clipper1995
Всем привет! Начитался материалов по утечке памяти, хотел смоделировать простой пример, чтобы потрогать 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")
JOHN_16
Оф дока
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.
Вы ничего там не видите наверняка потому что мусор уже вычищен.
clipper1995
JOHN_16
Оф дока
Запустил на 2.7, -
если в коде удаляются все объекты
 del item1
del item2
del item3
del item4
del itemall
, то они все попадают в garbage!

Понял, что тут изменилось в версии Python, так, что надо смотреть свежие доки по из первоисточника. А то почти все материалы и примеры по более старым версиям….
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB