GAEでの実行について

GAE(Google App Engine)では、毎回のHTTPリクエストごとにpythonファイルが新たに実行されてるものと思っていたが、どうやら違うみたい。
少なくとも、短い間隔で同じファイルの実行を要求するアクセスがあると、それが新しい環境で実行されないことがある。
GAEの内部では、実行するファイルはimportされてて、アクセスごとにその中のハンドラが呼び出されているようなイメージ。

ところで、pythonではデフォルト引数が

def f(a=[]):
  a.append(len(a))
  print a

みたいな書きかたの関数だと、これを続けて実行した場合

>>> f()
[0]
>>> f()
[0, 1]
>>> f()
[0, 1, 2]
>>> f()
[0, 1, 2, 3]

となってしまう。
デフォルト引数は、関数の呼び出し時ではなく、ファイルのロード時に評価されるため。
毎回の呼び出しのたびに引数aを[]で初期化したいときは別の書き方をしなければならない。
たとえば

def f(a=None):
  a = a if a != None else []
  a.append(len(a))
  print a

のような感じで。

今回、GAEではHTTPリクエストごとに実行環境が新しくなる、と勘違いしてて、前者みたいな書き方をしてて不具合になってしまってた。

追記(2010/11/04):
GAEドキュメントのアプリケーション キャッシュの「ハンドラ スクリプトのキャッシュ」に書いてた