デフォルトの引数は、関数が呼び出されるたびにではなく、関数の初期化時に作成されることを知っています。次のコードを参照してください。
def ook (item, lst=[]):
lst.append(item)
print 'ook', lst
def eek (item, lst=None):
if lst is None: lst = []
lst.append(item)
print 'eek', lst
max = 3
for x in xrange(max):
ook(x)
for x in xrange(max):
eek(x)
これがこのように実装された理由はわかりません。この動作は、各呼び出し時の初期化に対してどのような利点がありますか?