やっとPythonのクロージャの仕組みを少しは理解した件 で、清水川先生がクロージャを返すとき実行中のフレームオブジェクトが保存されるのか?という疑問を呈されている。 結論から言うと、フレームオブジェクトは保存されず、クロージャが必要とするオブジェクトだけが残される。この辺の仕組みがを簡単に解説してみよう。尚、以下の解説はPython2のものであり、Python3については未調査である。 例として、こんな関数を考えてみよう。 def func(): a = 100 b = 200 c = 300 def func2(): return a, b a = 400 return func2 この例では、func2 は func のローカル変数 a と b を参照するクロージャである。実行すると、(400, 200) を返す。 さて、関数を実行中、そのローカル変数は "セル"(cell)というオ
![クロージャのひみつ - atsuoishimoto's diary](https://cdn-ak-scissors.b.st-hatena.com/image/square/c26afe2eb67453f9567139408545ffe94e9bf79a/height=288;version=1;width=512/http%3A%2F%2Fcdn-ak.f.st-hatena.com%2Fimages%2Ffotolife%2Fa%2Fatsuoishimoto%2F20101006%2F20101006125529.png)