2009-06-24 3 views

答えて

18

はい、いいえ。 fooを離れるとオブジェクトは破棄されますが(他には何も参照されていない限り)、即時であるかどうかは実装の詳細であり、変更されます。

CPython(標準的なPython実装)では、refcountingが使用されるため、アイテムはすぐに破棄されます。オブジェクトに周期的な参照が含まれている場合や、参照が囲まれているフレームに保持されている場合(例:フレームの変数への参照を保持する例外が発生した場合)など、いくつかの例外があります。

Jythonただし、ガベージコレクタが起動するまで、オブジェクトはファイナライズされません。

このように、オブジェクトのタイムリーなファイナライズに頼るべきではありません。最後の参照が行きます。レキシカルスコープに基づいていくつかのクリーンアップを行う必要がある場合は、明示的にクリーンアップメソッドを呼び出すか、python 2.6の新しいwith statement( "from __future__ import with_statement"で2.5で利用可能)を参照してください。

+2

+1:変数aはすぐに削除される名前空間にあります。これは、参照カウントを減らすものです。変数はスタック状の構造で存在します。基本的なオブジェクトはそうではありません。 –

関連する問題