def X(l=[]): weirdness. Python bug ?

Bart van Deenen bart at
Fri Aug 22 11:41:18 CEST 2008


Thanks all for your answers. I figured your solution already, but now I understand where the behavior is from. One question remains: can I find my parameter 'l' somewhere? I looked in a lot of objects, but couldn't find it.



cokofreedom at wrote:

> On Aug 22, 11:13 am, Bart van Deenen
> <b... at> wrote:
>> # function
>> def X(l=[]):
>> l.append(1)
>> print l
>> # first call of X
>> X()
>> [1]
>> #second call of X
>> X()
>> [1, 1]
>> Where does the list parameter 'l' live between the two successive calls
>> of X(). Why is it not recreated with an empty list?
>> Is this correct behavior or is it a Python bug?
>> Does anyone have any pointers to the language documentation where this
>> behavior is described?

> "Default parameter values are evaluated when the function definition
> is executed."
> Depending on your use the common way to handle this is to do
> def x(lst = None):
>     if lst is None:
>         pass # lst has not been set to anything
>     else:
>         pass # lst has been set to something

More information about the Python-list mailing list