2011-07-14 5 views
16

は、次のコードを考えてみましょう(ガベージコレクション)デルを使用するか、Noneに再割り当て好むだろうか?あなたは

答えて

22

ガベージコレクションの違いはありません。どちらの場合も、self.fps_displayが指すオブジェクトへの参照が解放されます。どちらを使用するかは、名前がまだ存在するかどうか(現在は別のオブジェクトを指していますが、None)かどうかによって異なります。

+2

私は通常、NONE''への割り当てのために行きます。いくつかの異なる意味で 'None'が必要な場合は例外です(しかし' not present 'を示すために 'Ellipsis'を使用します)。 –

+2

実際、delはガベージコレクションプロセスを直接呼び出さないため、refcounterを減らし、変数をガベージスペースにぶら下げて、コレクタがクリーンアップするようにします。 – Red15

+3

@ Red15:正しい。 –

13

属性がfps_displayのオブジェクトがあります。

アトリビュートを奇妙にオプションにしたり、紛失したりしないでください。

ファーストクラスの属性で、合理的に見える場合は、リソースを解放するにはNoneに設定する必要があります。オブジェクトにオプションの属性があり、驚くべき例外が発生するため、属性を削除するのは気が散っています。それはself.fps_displayは `場合はhasattr(自己、 "fps_display")`よりNONE`であれば `行くしやすい(ときれい)だから

self.fps_display = None