ガーベージコレクションの過程をデバッグ

gc.set_debugをコールして、リークの起きるオブジェクトをリサイクルさず、gc.garbageリストに保持させる。
gc.collectでガーベージコレクションを強制実行。
それでも残っている物は開放不可オブジェクトとなる。

>>> def dump_garbage():
	""" どんなゴミがあるか見せる """
	# 強制収集
	print('GARBAGE:')
	gc.collect() # 検出した到達不可オブジェクトの数を返します。
	print('GARBAGE OBJECTS:')
	# 到達不能であることが検出されたが、解放する事ができないオブジェクトのリスト
	# (回収不能オブジェクト)
	for x in gc.garbage:
		s = str(x)
		if len(s) > 80: s = s[:77]+'...'
		print(type(x),'\n ',s)

		
>>> if __name__=='__main__':
	gc.enable() # 自動ガベージコレクションを有効にします。
	gc.set_debug(gc.DEBUG_LEAK) # メモリリークをデバッグするときに指定
	# 循環参照を作成
	l = []
	l.append(l)
	# 循環参照オブジェクトを削除
	del l
	dump_garbage()

	
GARBAGE:
gc: collectable <list 00F71620>
GARBAGE OBJECTS:
<class 'list'> 
  [[...]]