Я обнаружил, что если я не назначу возвращаемое значение функции переменной, она все равно попадет в глобальное пространство имен.Чтобы воссоздать ситуацию в миниатюре, я создал тестовый класс и функцию, которая возвращает экземпляр этого класса:
class testclass:
def __init__(self):
pass
def test_func():
return testclass()
Затем я создал функцию, чтобы подсчитать, сколько из нихпеременные находятся в глобальном пространстве имен:
def count_tc(glob):
num = 0
for name, obj in glob.items():
if isinstance(obj, testclass):
print(name)
num+=1
return num
, если я первоначально запускаю эту функцию count_tc, она возвращает 0. Но если я запускаю test_func, а затем повторно запускаю его, я получаю:
test_func()
count_tc(globals())
Возвращение
_
_8
2
Итак, теперь у нас есть не одна, а две переменные в глобальном пространстве имен, которым, похоже, присвоены имена _ типов.
Я понимаю процесс сборки мусора в python:что если нет ссылок на объект, он удаляется - поэтому я ожидаю, что это произойдет в этом случае.Это игрушечный пример, но у меня это происходит где-то еще, где память является проблемой, и, кажется, создает проблемы.Может ли кто-нибудь просветить меня относительно того, что (или что должно быть) происходит здесь?Я не уверен, что это актуально, но я запускаю это в блокноте Jupyter.Спасибо!