Roach クラスが一定量の「空腹」に達したときに「死ぬ」ようにしたいのですが、インスタンスを削除する方法がわかりません。用語を間違えているかもしれませんが、私が言いたいのは、ウィンドウに大量の「ゴキブリ」がいて、特定のゴキブリを完全に消したいということです。
コードを示しますが、かなり長いです。Roach クラスを Mastermind クラスの Roach 人口リストに追加しています。
一般に:
参照を減らすには、いくつかの通常の方法があります (逆参照オブジェクト -> 変数バインディング)。
del variable
と、現在のコンテキストの参照も削除されます1 つのオブジェクトへのすべての参照が削除された後 (counter==0)、ガベージ コレクションの適切な候補になりますが、処理されることは保証されません (ここを参照)。
CPython は現在、(オプションの) 循環的にリンクされたガベージの遅延検出を伴う参照カウント スキームを使用しています。これは、到達不能になるとすぐにほとんどのオブジェクトを収集しますが、循環参照を含むガベージを収集する保証はありません。循環ガーベッジの収集の制御については、gc モジュールの資料を参照してください。他の実装では動作が異なり、CPython は変更される可能性があります。オブジェクトが到達不能になったときにオブジェクトの即時ファイナライズに依存しないでください (例: 常にファイルを閉じます)。
オブジェクトに存在する参照の数、sys.getrefcountを使用
ガベージ コレクションを構成/チェックするモジュールはgcです。
GC は、オブジェクトを破棄するときにobject.__ del__メソッドを呼び出します (ここでの追加参照)
文字列のような一部の不変オブジェクトは、特別な方法で処理されます。たとえば、2 つの var に同じ文字列が含まれている場合、同じオブジェクトを参照する可能性がありますが、そうでないものもあります。オブジェクトの識別を確認してください。変化する?
オブジェクトのIDは、組み込み関数IDで見つけることができます
モジュールmemory_profilerは面白そうです - Python プログラムのメモリ使用量を監視するためのモジュール
このトピックに関する有用なリソースがたくさんあります。1 つの例: Find all references to an object in python
Python オブジェクトを強制的に削除することはできません。何も参照されていない場合(または、サイクル内のアイテムとしてのみ参照されているサイクル内にある場合)、削除されます。「首謀者」にその参照を消去するように指示する必要があります。
del somemastermind.roaches[n]