> On Mar 24, 2018, at 7:18 AM, Tin Tvrtković <tinches...@gmail.com> wrote:
> 
> it's faster to do this:
> 
>     self.__dict__ = {'a': a, 'b': b, 'c': c}
> 
> i.e. to replace the instance dictionary altogether. On PyPy, their core devs 
> inform me this is a bad idea because the instance dictionary is special 
> there, so we won't be doing this on PyPy. 
> 
> But is it safe to do on CPython?

This should work. I've seen it done in other production tools without any ill 
effect.

The dict can be replaced during __init__() and still get benefits of 
key-sharing.  That benefit is lost only when the instance dict keys are 
modified downstream from __init__().  So, from a dict size point of view, your 
optimization is fine.

Still, you should look at whether this would affect static type checkers, lint 
tools, and other tooling.


Raymond
_______________________________________________
Python-Dev mailing list
Python-Dev@python.org
https://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
https://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com

Reply via email to