From: Gary Herron on
This is addressed in the FAQ.


http://www.python.org/doc/faq/general/#why-are-default-values-shared-between-objects

jitendra gupta wrote:
>
> def foo(x = [0]):
> x[0] = x[0] + 1
> return x[0]
>
> def soo(x = None):
> if x is None:
> x = [0]
> x[0] = x[0] + 1
> return x[0]
>
> >>> foo()
> 1
> >>>foo() #See the behavior incremented by one
> 2
> >>>foo([1]) # but here based on given number
> 2
> >>>foo()
> 3
> >>>foo([1])
> 2
> >>>foo()
> 4
>
> >>>soo()
> 1
> >>>soo()
> 1
> >>>soo([1])
> 2
> >>>soo()
> 1
>
> Why foo() is incremented by 1 always when we are not passing any argument,
> but this is not happening in soo() case, In which scenario
> we will use these type of function.'
>
> Thanks
> Jitendra Kumar
>