Roachクラスが一定量の「空腹」に達したときに「死ぬ」ようにしたいのですが、インスタンスを削除する方法がわかりません。用語を間違えているかもしれませんが、言いたいのは、ウィンドウに大量の「ゴキブリ」があり、特定のものが完全に消えることです。
コードを紹介しますが、かなり長いです。 Roachクラスは、Mastermindクラスのゴキブリ個体群リストに追加されています。
一般に:
参照を減らすいくつかの通常の方法があります(オブジェクトの参照解除->変数バインディング):
del variable
を呼び出すと、現在のコンテキストの参照も削除されます1つのオブジェクトへのすべての参照が削除された後(counter == 0)、ガベージコレクションの適切な候補になりますが、処理されることは保証されません( reference here ):
CPythonは現在、循環リンクガベージの(オプションの)遅延検出を使用した参照カウントスキームを使用します。サイクリックガベージコレクションの制御については、gcモジュールのドキュメントを参照してください。他の実装は異なる動作をし、CPythonは変わる可能性があります。オブジェクトが到達不能になったときの即時のファイナライズに依存しないでください(例:常にファイルを閉じる)。
オブジェクトに存在する参照の数は、 sys.getrefcount を使用します
ガベージコレクションの構成/確認モジュールは gc です
GCは、オブジェクトを破壊するときに object .__ del __ メソッドを呼び出します( 追加の参照 )
文字列のようないくつかの不変オブジェクトは特別な方法で処理されます-例えば2つの変数に同じ文字列が含まれている場合、同じオブジェクトを参照する可能性がありますが、一部はそうではありません-チェック オブジェクトを識別し、id(...)からの戻り値が変わるのはなぜですか?
オブジェクトのidは組み込み関数 id で見つけることができます
module memory_profiler 面白そう-python programのメモリ使用量を監視するためのモジュール
トピックには多くの有用なリソースがあります。1つの例です。 Pythonのオブジェクトへのすべての参照を見つける
Pythonオブジェクトを強制的に削除することはできません。オブジェクトが何も参照していない場合(またはサイクル内のアイテムのみを参照しているサイクル内にある場合)削除されます。あなたの「首謀者」はその参照を消去します。
del somemastermind.roaches[n]
for i,roach in enumerate(roachpopulation_list)
if roach.hunger == 100
del roachpopulation_list[i]
break
母集団リストからインスタンスを削除して、インスタンスを削除します(すべてのゴキブリインスタンスが含まれます。
ゴキブリがPygameで作成されたスプライトである場合、.killの単純なコマンドでインスタンスが削除されます。