このコード
import gc
gc.disable()
print gc.isenabled()
print len(gc.get_objects())
class Foo(): pass
print len(gc.get_objects())
a=[]
print len(gc.get_objects())
for i in xrange(10000):
a.append(Foo())
print len(gc.get_objects())
a=[] # Should not collect
print len(gc.get_objects())
gc.collect()
print len(gc.get_objects())
この出力を生成します
False
3754
3755
3756
13756
3756
3374
最後から 2 番目の数字は 13756 であると予想します。これは、gc が無効になっており、元のa
リストが範囲外になったときに、それらのオブジェクトを削除しないためです。とにかくpythonはそれらのオブジェクトを収集しているようです。なんで ?
pythonは2.7.2です