デフォルト引数の奇妙な挙動
http://webtech-walker.com/archive/2010/10/13191417.html
を見ていて、ふと疑問に思った。
def foo(x=[]): print '--1', x if x: print '--2', x x = [] x.append(1) print x foo() foo() foo() 出力: --1 [] [1] --1 [1] --2 [1] [1] --1 [1] --2 [1] [1]
def foo(x=[]): print '--1', x if not x: print '--2', x x = [] x.append(1) print x foo() foo() foo() 出力: --1 [] --2 [] [1] --1 [] --2 [] [1] --1 [] --2 [] [1]
後者の例で、2回目のfoo()の呼び出しで、"--1 []"となるのは何故だろう?よく分からない。誰か教えて〜!
追記(2011/8/11):
上記のように分かりづらいスクリプトが書けてしまうので、「デフォルト引数にはミュータブルオブジェクトを使うな」というのが原則かな。