IPython в VS Code: сборщик мусора, по-видимому, знает о переменной до создания экземпляраPython

Программы на Python
Ответить
Anonymous
 IPython в VS Code: сборщик мусора, по-видимому, знает о переменной до создания экземпляра

Сообщение Anonymous »

Я пытался написать средство отслеживания объектов Python с использованием gc.get_objects(), которое можно было бы использовать внутри существующей и довольно сложной записной книжки IPython в VS Code для отслеживания потенциальных «утечек» памяти или забытых наборов данных. Я хотел иметь возможность отслеживать, когда создаются экземпляры новых объектов, а также когда они удаляются/собираются и, следовательно, исчезают из gc.get_objects().
При этом я столкнулся с ситуацией, которую я не могу объяснить.
Сокращенный минимальный пример выглядит следующим образом:
1-я ячейка:

Код: Выделить всё

import gc

__objs = gc.get_objects()
_objs = [id(o) for o in __objs]

#del __objs
2-я ячейка:

Код: Выделить всё

variable = ["test"]
3-я ячейка:

Код: Выделить всё

id(variable) in _objs
Выполнение этих трех ячеек вручную или с использованием «запустить все» приводит к тому, что последняя ячейка получает значение «False», как и ожидалось. Но если оператор «del __objs» в первой ячейке не прокомментирован, то последняя ячейка оценивается как «Истина», что для меня вообще не имеет смысла.
Выполнение всего в одной ячейке или внутри файла .py приводит к правильной оценке «False».
Что именно здесь происходит? Как идентификатор переменной, экземпляр которой создается во второй ячейке, может оказаться в _objs, но только если __objs будет удален? И почему это происходит только с тремя отдельными ячейками?
Будем благодарны за любую помощь!

Подробнее здесь: https://stackoverflow.com/questions/791 ... -before-in
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»