Уведомления

Группа в Telegram: присоединиться

#1 Авг. 15, 2018 12:39:18

clipper1995
Зарегистрирован: 2018-03-19
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

Garbage Collector и утечка памяти.

Всем привет! Начитался материалов по утечке памяти, хотел смоделировать простой пример, чтобы потрогать 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)

Офлайн

#2 Авг. 15, 2018 15:55:27

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  220  -
Профиль   Отправить e-mail  

Garbage Collector и утечка памяти.

Оф дока

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.
Вы ничего там не видите наверняка потому что мусор уже вычищен.



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#3 Авг. 15, 2018 17:41:36

clipper1995
Зарегистрирован: 2018-03-19
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

Garbage Collector и утечка памяти.

JOHN_16
Оф дока
Запустил на 2.7, -
если в коде удаляются все объекты
 del item1
del item2
del item3
del item4
del itemall
, то они все попадают в garbage!

Понял, что тут изменилось в версии Python, так, что надо смотреть свежие доки по из первоисточника. А то почти все материалы и примеры по более старым версиям….

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version