K
kenneth
Dear all,
I have encountered this weird problem.
I have a class definition with an __init__ argument 'd'
which defaults to {}. This argument is put in the 'self.d'
attribute at initialization
I create two independent instances of this class; the code
is as follows.
class C:
def __init__(self, i=10, d = {}):
self.d = d
self.i = i
def get(self):
print
print self.d
def set(self, dval, ival):
self.d.update(dval)
self.i+=ival
c1=C()
c1.set({'one':1},3)
c1.get()
del c1
c2=C()
c2.set({'two':2},4)
c2.get()
If I run the code I obtain:
{'one': 1}
{'two': 2, 'one': 1}
It seems that the 'self.d' argument of the second instance is the
same of the 'self.d' of the first (deleted!) instance.
Running the code in a debugger I discovered that, when I enter the
__init__ at the second initialization, before doing
self.d = d
the 'd' variable already contains the 'self.d' value of the first
instance and not the default argument {}.
Am I doing some stupid error, or this is a problem ?
Thanks in advance for any help,
Paolo
I have encountered this weird problem.
I have a class definition with an __init__ argument 'd'
which defaults to {}. This argument is put in the 'self.d'
attribute at initialization
I create two independent instances of this class; the code
is as follows.
class C:
def __init__(self, i=10, d = {}):
self.d = d
self.i = i
def get(self):
print self.d
def set(self, dval, ival):
self.d.update(dval)
self.i+=ival
c1=C()
c1.set({'one':1},3)
c1.get()
del c1
c2=C()
c2.set({'two':2},4)
c2.get()
If I run the code I obtain:
{'one': 1}
{'two': 2, 'one': 1}
It seems that the 'self.d' argument of the second instance is the
same of the 'self.d' of the first (deleted!) instance.
Running the code in a debugger I discovered that, when I enter the
__init__ at the second initialization, before doing
self.d = d
the 'd' variable already contains the 'self.d' value of the first
instance and not the default argument {}.
Am I doing some stupid error, or this is a problem ?
Thanks in advance for any help,
Paolo