Windows上のPython2.5のPytyon Shellで確認した。
こんなclassがあったとする。
class Test(object):
def foo(self):
return [self.bar(), self.bar({'buz': 10})]
def bar(self, p={'buz': 1}):
p['buz'] += 1
return p
下記のように、dict型の引数pに初期値が設定されているメソッドbar()を引数無しで呼ぶと、前回呼んだ時のメソッド内の変数pの値が使われるようだ。
>>> Test().foo()
[{'buz': 2}, {'buz': 11}]
>>> Test().foo()
[{'buz': 3}, {'buz': 11}]
ちょっとびっくり。引数の型がdictの場合だけでなく、配列でも同じことが起きた。
また、classじゃなくても同じ現象になった。
def test(foo={'bar': 1}):
foo['bar'] += 1
return foo
>>> test()引数を付けた時だけ別になっている。
{'bar': 2}
>>> test()
{'bar': 3}
>>> test({'bar': 10})
{'bar': 11}
>>> test()
{'bar': 4}
0 件のコメント:
コメントを投稿