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

Reply via email to