On 7/15/06, Stephen Thorne <[EMAIL PROTECTED]> wrote: > When testing some 'real world' code using pypy, an inconsistancy with > the way __init__ works between lists and dicts. > > The assumption was made when implementing __init__ for pypy that > list.__init__ and dict.__init__ would both wipe the contents of the > objects, but it seems that in cpython, this isn't precisely the case. > > >>> l = [2,3] > >>> list.__init__(l) > >>> l > [] > > >>> d = {2: 3} > >>> dict.__init__(d) > >>> d > {2: 3} > > dict.__init__(mydict) does not wipe the keys. list.__init__(mylist) > wipes the lists contents.
I think it's an accident of implementation. I never thought about this from the POV of a subclass. Apparently dict.__init__() shares some code with dict.update(). Or does it do a merge without overwriting existing keys? > https://codespeak.net/issue/pypy-dev/issue240 > > Is there a good reason for this behaviour? It has broken my code (a > subclass of dict that populates a key before calling the superclasses > constructer, in the twisted codebase). I think your code was skating on awfully thin ice by making any assumptions whatsoever about the base class constructor. But I also think that this ought to be specified in the language spec. I'm not sure that consistency between list and dict is important to me, but they probably should both answer to some higher principle which I cannot formulate ATM. -- --Guido van Rossum (home page: http://www.python.org/~guido/) _______________________________________________ Python-Dev mailing list Python-Dev@python.org http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com