Подтвердить что ты не робот

Есть ли способ удалить созданные переменные, функции и т.д. Из памяти интерпретатора?

Я искал точный ответ на этот вопрос уже пару дней, но ничего хорошего не получил. Я не полный новичок в программировании, но еще не на промежуточном уровне.

Когда я нахожусь в оболочке Python, я печатаю: dir(), и я могу видеть все имена всех объектов в текущей области (основной блок), их 6:

['__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__']

Затем, когда я объявляю переменную, например x = 10, она автоматически добавляет к этим спискам объектов под встроенным модулем dir(), а когда я снова набираю dir(), он показывает:

['__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'x']

То же самое касается функций, классов и т.д.

Как удалить все эти новые объекты без стирания стандарта 6, который, если он доступен в начале?

Я читал здесь о "очистке памяти", "очистке консоли", которая удаляет весь текст из окна командной строки:

>>> import sys
>>> clear = lambda: os.system('cls')
>>> clear()

Но все это не имеет ничего общего с тем, что я пытаюсь достичь, оно не очищает все используемые объекты.

4b9b3361

Ответ 1

Вы можете удалить отдельные имена с помощью del:

del x

или вы можете удалить их из объекта globals():

for name in dir():
    if not name.startswith('_'):
        del globals()[name]

Это всего лишь пример цикла; он защищает только удаляет имена, которые не начинаются с подчеркивания, что делает (не необоснованным) предположение, что вы использовали только имена без подчеркивания в начале вашего интерпретатора. Вы можете использовать жестко закодированный список имен, чтобы сохранить вместо этого (белый список), если вы действительно хотите быть основательным. Для выполнения клиринга для вас нет встроенной функции, кроме как просто выйти и перезапустить интерпретатор.

Модули, которые вы импортировали (import os), будут импортированы, поскольку они ссылаются на sys.modules; последующий импорт будет повторно использовать уже импортированный объект модуля. У вас просто не будет ссылки на них в вашем текущем глобальном пространстве имен.

Ответ 2

Да. Существует простой способ удалить все в iPython. В консоли iPython просто введите:

%reset

Затем система попросит вас подтвердить. Нажмите y. Если вы не хотите видеть это приглашение, просто введите:

%reset -f

Это должно работать.

Ответ 3

На самом деле python вернет память, которая больше не используется. Это называется сборкой мусора, которая является автоматическим процессом на python. Но если вы хотите это сделать, вы можете удалить его с помощью del variable_name. Вы также можете сделать это, назначив переменной None

a = 10
print a 

del a       
print a      ## throws an error here because it been deleted already.

Единственный способ по-настоящему восстановить память из объектов, не связанных с Python, - через сборщик мусора. Ключевое слово del просто отвязывает имя от объекта, но объект все равно должен быть собран в мусор. Вы можете заставить сборщик мусора работать с помощью модуля gc, но это почти наверняка является преждевременной оптимизацией, но у него есть свои риски. Использование del не имеет реального эффекта, так как эти имена были бы удалены, поскольку они все равно выходили за рамки.

Ответ 4

Если вы находитесь в интерактивной среде, такой как Jupyter или ipython, вас может заинтересовать очистка нежелательного var, если они становятся тяжелыми.

Магические команды reset и reset_selective доступны в интерактивных сеансах python, таких как ipython и Jupyter

1) reset

reset Сбрасывает пространство имен, удаляя все имена, определенные пользователем, если вызывается без аргументов.

in, а параметры out указывают, хотите ли вы сбросить кеширование ввода/вывода. История каталогов очищается с помощью параметра dhist.

reset in out

Другим интересным является array, который удаляет только массивы numpy:

reset array

2) reset_selective

Сбрасывает пространство имен, удаляя имена, определенные пользователем. История ввода/вывода оставлена ​​на случай, если они вам понадобятся.

Пример чистого массива:

In [1]: import numpy as np
In [2]: littleArray = np.array([1,2,3,4,5])
In [3]: who_ls
Out[3]: ['littleArray', 'np']
In [4]: reset_selective -f littleArray
In [5]: who_ls
Out[5]: ['np']

Источник: http://ipython.readthedocs.io/en/stable/interactive/magics.html