pythonにおける名前空間の扱いについて
Python初心者です。以下のようなフィボナッチ数列を生成するコードについて質問があります。
def fastFib(n, memo = {}):
if n == 0 or n == 1:
return 1
try:
return memo[n]
except KeyError:
result = fastFib(n-1, memo) + fastFib(n-2, memo)
memo[n] = result
return result
これは、memoに計算済みのフィボナッチ数列の値を保存して、再帰的に呼び出すことで、重複する計算を回避することを意図したものです。コードは、"Python言語によるプログラミングイントロダクション" p. 281 からコメントアウト以外の部分を引用しました。
この際、全ての再帰呼び出し関数が持つ名前テーブルにmemoが存在する必要があると思うのですが、それはmemoの初期化を行っているのが関数宣言内であるからでしょうか?
名前テーブルの扱いが分からないもので、より詳しく知ることのできるキーワードやドキュメントを教えていただければ幸いです。