Marc 'BlackJack' Rintsch wrote: > > def __init__(self,answers={}): > > self.answers=answers > > Default arguments are only evaluated once when the ``def`` is executed, > so all your `Storage` classes share the same dictionary. One idiom to > solve this is: > > def __init__(self, answers=None): > self.answers = answers or dict()
Nitpick: the expression 'answers or dict()' is false economy. It may provoke even subtler errors, because an empty dict is False in a boolean context. Example: # here the answers are shared: shared_answers = {"question": "answer"} first = Storage(shared_answers) second = Storage(shared_answers) print second.answers is first.answers # True # here the answers aren't shared:" shared_answers = {} first = Storage(shared_answers) second = Storage(shared_answers) shared_answers["question"] = "answer" print second.answers is first.answers # False To avoid the confusion I recommend the following: def __init__(self, answers=None): if answers is None: answers = {} self.answers = answers Peter -- http://mail.python.org/mailman/listinfo/python-list