파이썬은 Reference Count을 사용하여 리소스를 관리합니다. 당신이 목록에 넣어 때
import sys
class foo:
pass
b = foo()
a = [b, 1]
sys.getrefcount(b) # gives 3
sys.getrefcount(a) # gives 2
a = None # delete the list
sys.getrefcount(b) # gives 2
는 위의 예에서, B의 참조 카운트가 증가 될 것이며, 당신이 볼 수있는 당신이 목록을 삭제하면, B의 참조 횟수도 감소 얻을. 따라서 귀하의 코드에
def release_list(a):
del a[:]
del a
은 중복되었습니다.
요약하면 목록을 None 개체에 할당하거나 del 키워드를 사용하여 특성 사전에서 목록을 제거하면됩니다. (a.k.a, 실제 객체의 이름을 바인딩 해제). 예 :
a = None # or
del a
개체의 참조 횟수가 0이되면 파이썬은 메모리를 확보합니다. 개체가 삭제되는지 확인하려면 개체를 이름이나 컨테이너로 참조하는 다른 작업 영역이 없는지 확인해야합니다. sys.getrefcount 당신에게 2를 제공하는 경우
sys.getrefcount(b) # gives 2
, 그건 당신이 개체의 참조를 가지고있는 유일한 사람이고, 당신이
b = None
을 수행 할 때이 메모리에서 해제받을 것을 의미합니다.
많은 양의 데이터를 처리하고 실제로 MemoryError 예외가 발생하지 않는 한 메모리 관리에 대해 걱정하지 마십시오. – monkut