ひどく必要なメモリを解放するために削除する必要があるプログラムに大きなリストがあるため、gc を理解しようとしています。私が答えたい基本的な質問はhow can I find what is being tracked by gc and what has been freed?
、私の問題を示すコードです
import gc
old=gc.get_objects()
a=1
new=gc.get_objects()
b=[e for e in new if e not in old]
print "Problem 1: len(new)-len(old)>1 :", len(new), len(old)
print "Problem 2: none of the element in b contain a or id(a): ", a in b, id(a) in b
print "Problem 3: The reference counts are insanely high, WHY?? "
私見、これはdocsで対処されていない奇妙な動作です。まず、単一の変数を割り当てると、gc に複数のエントリが作成されるのはなぜですか? そして、なぜそれらのどれも私が作った変数ではないのですか?? get_objects() で作成した変数のエントリはどこにありますか?
EDIT:martjinの最初の応答に応えて、私は以下をチェックしました
a="foo"
print a in gc.get_objects()
まだ行きません:( aがgcによって追跡されていることを確認するにはどうすればよいですか?