[issue30040] new empty dict can be more small

Raymond Hettinger report at bugs.python.org
Tue Mar 12 11:26:42 EDT 2019


Raymond Hettinger <raymond.hettinger at gmail.com> added the comment:

I don't think this should have been done.  Conceptually, there is no basis for presuming key-sharing for new empty dicts -- you can't know what they would share with.  This patch essentially undoes the entire reason for having a pre-allocated minsize dict.  If it were deemed to be the norm that applications typically had huge numbers of empty dicts that were never populated, then the correct solution would be a NULL pointer to the table field (as dicts do).

FWIW, the macro benchmarks aren't very informative here because they don't exercise much of this code.  I think there is an over-prioritization of small space savings at the expense of the intended use cases for dicts.  This patch just forces every dict that gets used to have to convert back from a key-sharing dict and do a memory allocation and memset(0) in the process.  The whole point of the minsize dict was to avoid that cost in the common case of small dicts (i.e. passing keyword arguments).

----------
nosy: +rhettinger, tim.peters
status: closed -> open

_______________________________________
Python tracker <report at bugs.python.org>
<https://bugs.python.org/issue30040>
_______________________________________


More information about the Python-bugs-list mailing list