Pythonの関数内関数の生存期間

Pythonは関数内に関数を定義し、そのネストした関数はクロージャ的に外の関数スコープの変数を参照することが出来ます*1

しかし、やったークロージャだーとJavaScriptばりに乱用できるかというと全くそうではない点に注意が必要です。というのもPythonの関数内関数は、ローカル変数と同等の扱いなので、外の関数が終了すると中の関数も破棄されるからです。

なので、何かしらのコールバック関数に関数内関数を適用することはできないので、良い子の皆さんはこんなことにドハマりしないように注意しましょうorz、というお話でした。

そんなことはなさそうということが判明しました。どこかから参照されている間は破棄されることは無いようです。よかった。

*1:Python2.xではメソッド呼び出しなどによる破壊的操作でのみ書き換えできる。Python3.xでは、nonlocalキーワードを使えば書き換えできる。