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