36

Roach クラスが一定量の「空腹」に達したときに「死ぬ」ようにしたいのですが、インスタンスを削除する方法がわかりません。用語を間違えているかもしれませんが、私が言いたいのは、ウィンドウに大量の「ゴキブリ」がいて、特定のゴキブリを完全に消したいということです。

コードを示しますが、かなり長いです。Roach クラスを Mastermind クラスの Roach 人口リストに追加しています。

4

3 に答える 3

25

一般に:

  • 各バインド変数 -> オブジェクトは、内部オブジェクトの参照カウンターを増やします
  • 参照を減らすには、いくつかの通常の方法があります (逆参照オブジェクト -> 変数バインディング)。

    1. 変数が宣言されたコードの終了ブロック (初めて使用)
    2. オブジェクトを破壊すると、すべての属性/メソッド変数の参照が解放されます -> オブジェクト参照
    3. を呼び出すdel variableと、現在のコンテキストの参照も削除されます
  • 1 つのオブジェクトへのすべての参照が削除された後 (counter==0)、ガベージ コレクションの適切な候補になりますが、処理されることは保証されません (ここを参照)。

CPython は現在、(オプションの) 循環的にリンクされたガベージの遅延検出を伴う参照カウント スキームを使用しています。これは、到達不能になるとすぐにほとんどのオブジェクトを収集しますが、循環参照を含むガベージを収集する保証はありません。循環ガーベッジの収集の制御については、gc モジュールの資料を参照してください。他の実装では動作が異なり、CPython は変更される可能性があります。オブジェクトが到達不能になったときにオブジェクトの即時ファイナライズに依存しないでください (例: 常にファイルを閉じます)。

于 2013-05-22T09:03:34.480 に答える
12

Python オブジェクトを強制的に削除することはできません。何も参照されていない場合(または、サイクル内のアイテムとしてのみ参照されているサイクル内にある場合)、削除されます。「首謀者」にその参照を消去するように指示する必要があります。

del somemastermind.roaches[n]
于 2013-05-22T08:20:35.143 に答える