Reckoner wrote:
Hi,
X-Antispam: NO; Spamcatcher 5.2.1. Score 50

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.

Default arguments are evaluated once and then shared, so don't use them
with mutable objects like lists. Do this instead:

    class Foo():
        def __init__(self, h=None):
            if h is None:
                self.h = []
            else:
                self.h = h
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to