Pythonは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の参照カウントがインクリメントされ、あなたが見ることができるようにあなたがリストを削除するとき、A、Bの参照カウントも減らさます。だからあなたのコードで
def release_list(a):
del a[:]
del a
は冗長でした。
要約すると、リストをNoneオブジェクトに割り当てるか、delキーワードを使用して属性辞書からリストを削除するだけです。 (a.k.a、実際のオブジェクトから名前をバインド解除する)。たとえば、
a = None # or
del a
オブジェクトの参照カウントがゼロになると、Pythonはメモリを解放します。オブジェクトが確実に削除されるようにするには、オブジェクトを名前、コンテナで参照する他の場所がないことを確認する必要があります。 sys.getrefcountはあなたに2を与える場合
sys.getrefcount(b) # gives 2
は、それはあなたがオブジェクトの参照を持っていただけであり、あなたが
b = None
を行うときに、それがメモリから解放されますを意味します。
大量のデータを処理していて実際にMemoryError例外が発生している場合を除き、メモリ管理について心配する必要はありません。 – monkut