[PYTHON] 파이썬 사전에 항목을 삭제 한 후 메모리를 되찾기
PYTHON파이썬 사전에 항목을 삭제 한 후 메모리를 되찾기
나는 파이썬에서 상대적으로 큰 사전을 가지고 있으며, 그것으로부터 아이템을 삭제할뿐만 아니라 실제로 프로그램에서 삭제 된 것들로부터 메모리를 회수 할 수 있기를 원합니다. 사전에서 항목을 삭제하고 가비지 수집기를 수동으로 실행하더라도 Python은 메모리 자체를 해제하지 않는 것으로 보이는 문제를 겪고 있습니다.
이에 대한 간단한 예 :
>>> tupdict = {}
# consumes around 2 GB of memory
>>> for i in xrange(12500000):
... tupdict[i] = (i,i)
...
# delete over half the entries, no drop in consumed memory
>>> for i in xrange(7500000):
... del tupdict[i]
...
>>> import gc
# manually garbage collect, still no drop in consumed memory after this
>>> gc.collect()
0
>>>
무슨 일이 벌어지고 있는지 상상해 봅니다. 엔트리가 삭제되고 가비지 컬렉터가 실행되지만 파이썬은 사전 크기를 조정하지 않습니다. 제 질문은이 문제를 해결할 수있는 간단한 방법이 있습니까, 아니면 프로그램 작성 방법에 대해 더 많이 재고 할 필요가 있습니까?
해결법
-
==============================
1.파이썬이이 메모리를 기반 OS로 반환 할 것인지 아닌지를 결정하는 많은 요소가 있습니다. 이는 메모리가 해제되는지 여부를 알려주는 방법 일 것입니다. CPython은 풀린 메모리를 유지하면서 효율적인 방식으로 재사용 할 수있는 풀링 된 할당 자 시스템을 가지고 있습니다 (그러나 이러한 후속 할당은 OS의 관점에서 메모리 풋 프린트를 증가시키지 않습니다) 다시 보게.
파이썬이이 메모리를 기반 OS로 반환 할 것인지 아닌지를 결정하는 많은 요소가 있습니다. 이는 메모리가 해제되는지 여부를 알려주는 방법 일 것입니다. CPython은 풀린 메모리를 유지하면서 효율적인 방식으로 재사용 할 수있는 풀링 된 할당 자 시스템을 가지고 있습니다 (그러나 이러한 후속 할당은 OS의 관점에서 메모리 풋 프린트를 증가시키지 않습니다) 다시 보게.
또한 일부 유닉스 플랫폼에서 프로세스는 응용 프로그램이 닫힐 때까지 (또는 다른 중요한 이벤트가 발생할 때까지) 해제 된 메모리를 OS로 다시 릴리스하지 않습니다. 풀 전체가 해제 된 상황에서 (그리고 파이썬이 미래의 객체에 대해 열린 상태로 유지하기보다는) 자유롭게 결정할 수도 있지만, OS는 여전히이 메모리를 다른 프로세스에서 사용하기 위해 해제하지 않을 것입니다 (그러나 원래 프로세스 내에서 추가 재 할당에 사용될 수 있음). 일반적으로 이것은 메모리 조각화를 줄이는 데 유용하며 사용되지 않는 프로세스 메모리가 디스크로 페이징 될 때 너무 많은 단점이 없습니다. Windows는 새로운 할당 (작업 관리자에서 볼 수 있음)에서 사용하기 위해 프로세스 메모리를 다시 OS로 릴리스하므로 Windows에서이 메모리를 사용하면 다른 결과가 나타날 수 있습니다.
결국, 할당 취소 된 프로세스 메모리를 관리하는 방법은 운영 체제의 범위이며, 시스템 정보 도구를 살펴보면 반드시 전체 진실을 말할 필요가없는 다양한 방식 (부작용과 부작용이 있음)이 있습니다. .
-
==============================
2.항목이 사전에서 삭제 된 경우 Python이 사전의 크기를 조정하지 않는다는 것은 맞습니다. 이것은 OS 메모리 관리 및 가비지 콜렉션과 아무 관련이 없으며, 파이썬의 dict 데이터 구조에 대한 구현 세부 사항입니다.
항목이 사전에서 삭제 된 경우 Python이 사전의 크기를 조정하지 않는다는 것은 맞습니다. 이것은 OS 메모리 관리 및 가비지 콜렉션과 아무 관련이 없으며, 파이썬의 dict 데이터 구조에 대한 구현 세부 사항입니다.
해결 방법은 이전 사전을 복사하여 새 사전을 만드는 것입니다. 자세한 정보는 위의 동영상을 확인하십시오. http://pyvideo.org/video/276/the-mighty-dictionary-55 (26:30 경 대답이 있습니다).
from https://stackoverflow.com/questions/3935675/python-reclaiming-memory-after-deleting-items-in-a-dictionary by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] SciPy의 지수 곡선 피팅 (0) | 2018.11.09 |
---|---|
[PYTHON] 동일한 키에 대해 여러 값을 유지하면서 파일을 구성하는 방법은 무엇입니까? (0) | 2018.11.09 |
[PYTHON] 지수 형식 / 과학 표기법이 아닌 일반 형식으로 부동 소수점 숫자 인쇄 (0) | 2018.11.09 |
[PYTHON] 파이썬에서 모든 예외를 잡기위한 나쁜 생각 (0) | 2018.11.09 |
[PYTHON] 특정 정수가 목록에 있는지 확인하는 방법 (0) | 2018.11.09 |