pythonのデフォルト引数の挙動は勘違いしそうで怖いので気をつけたい。 ➜ ~ python Python 2.7.11 (default, Feb 2 2016, 21:44:54) [GCC 4.2.1 Compatible Apple LLVM 7.0.2 (clang-700.1.81)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> def func(arg={}): ... return arg ... >>> foo = func() >>> foo['a'] = 'foo' >>> >>> bar = func() >>> bar['b'] = 'bar' >>> print(foo) {'a': 'foo', 'b': 'bar'} >>> print(bar) {'a': 'foo', 'b': 'bar'} デフォルト引数はモジュールロード時の1度だけしか評価されないために、呼び出しの間で共有されている。 なんでこんな仕様にしたんだろうな・・・。