pythonの専門家が次の出力を私に説明できますか?pythonローカル変数の奇妙な振る舞い
def modify_dict(exclude_params):
exclude_params["domain_url"] = set()
def g(exclude_params={}):
print id(exclude_params)
print exclude_params
modify_dict(exclude_params)
print exclude_params
return None
>>> g()
23191104
{}
{'domain_url': set([])}
>>> g()
23191104
{'domain_url': set([])}
{'domain_url': set([])}
>>>
私は、どちらかの呼び出しでg
に変数exclude_params
が{}
に初期化されなければならないので、地元の引数を渡されていません。 しかし、2回目の呼び出しでは、そうではありませんでした。
ローカル変数のアドレスは、2つの別々の呼び出しで同じです。したがって、古いローカル変数は再利用されますか??
Sigh。さらに、「デフォルト値として変更可能なオブジェクト」を検索するのに失敗しました。 –
間違ったキーワードを検索しましたが、これは名前空間とガベージコレクションと関係があると思いました。 – kakarukeys