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の初期化を行っているのが関数宣言内であるからでしょうか?

 名前テーブルの扱いが分からないもので、より詳しく知ることのできるキーワードやドキュメントを教えていただければ幸いです。