programing

생성된 변수, 함수 등을 통역사의 메모리에서 삭제할 수 있는 방법이 있습니까?

stoneblock 2023. 6. 8. 19:14

생성된 변수, 함수 등을 통역사의 메모리에서 삭제할 수 있는 방법이 있습니까?

저는 이 질문에 대한 정확한 답을 며칠 동안 찾고 있었지만 좋은 것을 얻지 못했습니다.저는 프로그래밍의 완전한 초보자는 아니지만, 아직 중급 수준도 아닙니다.

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이후 가져오기는 이미 가져온 모듈 개체를 다시 사용합니다.현재 글로벌 네임스페이스에는 이러한 이름에 대한 참조가 없습니다.

그러나 Python은 메모리의 데이터에 대해 어떠한 보안도 보장하지 않습니다.개체가 더 이상 참조되지 않으면 인터프리터는 메모리를 더 이상 사용하지 않는 것으로 표시하지만 데이터에 액세스하지 못하도록 해당 메모리를 덮어쓰는 단계는 수행하지 않습니다.이러한 수준의 보안 보호가 필요한 경우 보안을 염두에 두고 자체 메모리를 관리하는 타사 확장 기능을 사용해야 합니다.

네. iPython의 모든 것을 제거하는 간단한 방법이 있습니다.iPython 콘솔에서 다음을 입력합니다.

%reset

그러면 시스템에서 확인을 요청합니다.다급해요.이 프롬프트를 표시하지 않으려면 다음을 입력합니다.

%reset -f

이 방법이 효과가 있을 겁니다.

파이썬 가비지 수집기를 사용할 수 있습니다.

import gc
gc.collect()

이 같대은화환있경형는우경에와 같은 .Jupyter또는ipython만약 그것들이 무거워진다면, 당신은 원하지 않는 vars를 제거하는 것에 관심이 있을 수 있습니다.

마법의 명령어들은reset그리고.reset_selective다음과 같은 대화형 파이썬 세션에서 사용할 수 있습니다.ipython그리고.Jupyter

1)reset

reset인수 없이 호출된 경우 사용자가 정의한 모든 이름을 제거하여 네임스페이스를 재설정합니다.

in 리고그고.out매개 변수는 입력/출력 캐시를 플러시할지 여부를 지정합니다.는 " 터리기다사플다니됩러시"로.dhist매개 변수

reset in out

다른 은 또다른흥운것은로입니다.array Arraysnumpy Array만 합니다.

reset array

리셋_리셋

사용자가 정의한 이름을 제거하여 네임스페이스를 재설정합니다.필요에 따라 입력/출력 기록이 남아 있습니다.

배열 정리 예제:

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

이 정도면 효과가 있을 겁니다.

globals().clear()

사실 python은 더 이상 사용하지 않는 메모리를 회수할 것입니다.이것은 python에서 자동 프로세스인 가비지 컬렉션이라고 불립니다.하지만 만약 당신이 그것을 하고 싶다면, 당신은 그것을 삭제할 수 있습니다.del variable_name변수를 다음에 할당하여 이 작업을 수행할 수도 있습니다.None

a = 10
print a 

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

참조되지 않은 Python 개체에서 메모리를 실제로 회수하는 유일한 방법은 가비지 수집기를 사용하는 것입니다.del 키워드는 단순히 개체에서 이름의 바인딩을 해제하지만 개체는 여전히 가비지 수집이 필요합니다.모듈을 할 수 의 위험이 있습니다.gc 모듈을사가여수실수강있행, ▁you▁to▁risks▁collectorgc▁its용사를 합니다.del그 이름들은 어차피 범위를 벗어나서 삭제되었을 것이기 때문에 실질적인 효과는 없습니다.

이것은 저에게 효과가 있었습니다.

글로벌용으로 한 번 실행하고 현지인이 실행해야 합니다.

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

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

del 문을 사용하여 Python에서 변수를 삭제할 수 있습니다.

예:

y = 10개의 배달

삭제된 변수를 사용하거나 참조하려고 하면 오류가 정의되지 않습니다.

언급URL : https://stackoverflow.com/questions/26545051/is-there-a-way-to-delete-created-variables-functions-etc-from-the-memory-of-th