tinauser wrote: > Hallo list, > here again I have a problem whose solution might be very obvious, but > I really cannot see it: > I have a class having as attribute a dictionary whose keys are names > and values are instance of another class. > This second class has in turn as an attribute a dictionary. > I want a function of the first class that can change value of one of > the second class instance's dictionary. > however I cannot do it without modifying this attribute for ALL the > instance of the second class contained in the first class' dictionary. > What I'm doing wrong? > > the code: > > ############### > ###can i change a dictionary attribute of an instantated object > without affectin all the instances of that object? > > class mistClass(): > def __init__(self,name,cDict={}):
When you don't provide a cDict argument the default is used which is the same for every instance. Change the above to def __init__(self, name, cDict=None): if cDict is None: cDict = {} > class mistClassContainer(): > def __init__(self,name,dict_of_mistclass={}): Same here. > def setName(self,n): > self._name=n > > def getName(self): > return self._name Python has properties, so you don't need this just-in-case getter/setter nonsense. > for k,v in zip(listK,listV): > self._cDict[k]=v Make that self._cDict.update(zip(listK, listV)) By the way, not everyone loves Hungarian notation... -- http://mail.python.org/mailman/listinfo/python-list