인터프리터의 메모리에서 생성 된 변수, 함수 등을 삭제하는 방법이 있습니까?
나는 며칠 동안이 질문에 대한 정확한 답을 찾고 있었지만 좋은 것을 얻지 못했습니다. 나는 프로그래밍의 완전한 초보자는 아니지만 아직 중급 수준은 아닙니다.
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()
그러나이 모든 것은 내가 달성하려는 것과는 아무런 관련이 없으며 사용 된 모든 개체를 정리하지 않습니다.
다음을 사용하여 개별 이름을 삭제할 수 있습니다 del
.
del x
또는 globals()
개체 에서 제거 할 수 있습니다 .
for name in dir():
if not name.startswith('_'):
del globals()[name]
이것은 단지 예제 루프입니다. 그것은 방어 적으로 밑줄로 시작하지 않는 이름 만 삭제하고, 통역사에서 시작 부분에 밑줄이없는 이름 만 사용했다고 가정합니다. 정말로 철저히하고 싶다면 하드 코딩 된 이름 목록을 대신 보관 (화이트리스트) 할 수 있습니다. 인터프리터를 종료하고 다시 시작하는 것 외에는 지우기를 수행하는 내장 기능이 없습니다.
가져온 모듈 ( import os
)은에서 참조하기 때문에 가져온 상태로 유지됩니다 sys.modules
. 후속 가져 오기는 이미 가져온 모듈 객체를 재사용합니다. 현재 글로벌 네임 스페이스에는 참조가 없습니다.
예. iPython에서 모든 것을 제거하는 간단한 방법이 있습니다. iPython 콘솔에서 다음을 입력하십시오.
%reset
그러면 시스템에서 확인을 요청합니다. y를 누릅니다. 이 프롬프트를 보지 않으려면 다음을 입력하십시오.
%reset -f
작동합니다 ..
Python 가비지 수집기를 사용할 수 있습니다.
import gc
gc.collect()
대화 형 환경에 Jupyter
있거나 원하지 않는 var 가 무거워지면 삭제하는ipython
데 관심이있을 수 있습니다 .
마법-명령 reset
과 reset_selective
같은 대화 형 파이썬 세션에 vailable이다 ipython
하고Jupyter
1) reset
reset
Resets the namespace by removing all names defined by the user, if called without arguments.
in
and the out
parameters specify whether you want to flush the in/out caches. The directory history is flushed with the dhist
parameter.
reset in out
Another interesting one is array
that only removes numpy Arrays:
reset array
2) reset_selective
Resets the namespace by removing names defined by the user. Input/Output history are left around in case you need them.
Clean Array Example:
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']
Source: http://ipython.readthedocs.io/en/stable/interactive/magics.html
Actually python will reclaim the memory which is not in use anymore.This is called garbage collection which is automatic process in python. But still if you want to do it then you can delete it by del variable_name
. You can also do it by assigning the variable to None
a = 10
print a
del a
print a ## throws an error here because it's been deleted already.
The only way to truly reclaim memory from unreferenced Python objects is via the garbage collector. The del keyword simply unbinds a name from an object, but the object still needs to be garbage collected. You can force garbage collector to run using the gc module, but this is almost certainly a premature optimization but it has its own risks. Using del
has no real effect, since those names would have been deleted as they went out of scope anyway.
This worked for me.
You need to run it twice once for globals followed by locals
for name in dir():
if not name.startswith('_'):
del globals()[name]
for name in dir():
if not name.startswith('_'):
del locals()[name]
'code' 카테고리의 다른 글
로그에 Spring 트랜잭션 표시 (0) | 2020.09.07 |
---|---|
저장소 패턴을 사용하지 않고 ORM을있는 그대로 사용 (EF) (0) | 2020.09.07 |
ostringstream을 지우는 방법 (0) | 2020.09.07 |
클래스 상수 대 속성 재정의 (0) | 2020.09.07 |
단위 테스트를 어떻게 단위 테스트합니까? (0) | 2020.09.07 |