Python は参照カウントを使用してそのリソースを管理します。
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 = None # or
del a
オブジェクトの参照カウントがゼロになると、Python がメモリを解放します。オブジェクトが確実に削除されるようにするには、他の場所がオブジェクトを名前またはコンテナーで参照していないことを確認する必要があります。
sys.getrefcount(b) # gives 2
sys.getrefcountが 2 を返した場合、それはオブジェクトの参照を持っていたのはあなただけであり、いつ参照したかを意味します。
b = None
メモリから解放されます。