initializing with empty list as default causes freaky problems

Gary Herron gherron at islandtraining.com
Mon Jul 27 19:06:36 EDT 2009


Reckoner wrote:
> Hi,
>
> Observe the following:
>
> In [202]: class Foo():
>    .....:     def __init__(self,h=[]):
>    .....:         self.h=h
>    .....:
>    .....:
>
> In [203]: f=Foo()
>
> In [204]: g=Foo()
>
> In [205]: g.h
> Out[205]: []
>
> In [206]: f.h
> Out[206]: []
>
> In [207]: f.h.append(10)
>
> In [208]: f.h
> Out[208]: [10]
>
> In [209]: g.h
> Out[209]: [10]
>
> The question is: why is g.h updated when I append to f.h?  Shouldn't
> g.h stay []?
>
> What am I missing here?
>
> I'm using Python 2.5.1.
>
> Thanks in advance.
>   

This is a FAQ (and *very* common newbie trap)!  See:

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

Gary Herron




More information about the Python-list mailing list