[Python-ideas] dict changes [was: Ordered storage of keyword arguments]
Raymond Hettinger
raymond.hettinger at gmail.com
Thu Oct 28 21:06:38 CEST 2010
On Oct 28, 2010, at 11:44 AM, Jim Jewett wrote:
>
>> It uses an open addressing strategy. Each dict entry holds three
>> pointer-sized fields: key object, value object, and cached hash value
>> of the key.
>> (set entries have only two fields, since they don't hold a value object)
>
> Has anyone benchmarked not storing the hash value here
That would be a small disaster. Either you call PyObject_Hash()
for every probe (adding function call overhead for int and str,
and adding tons of work for other types) or you can go directly
to Py_RichCompareBool() which is never fast.
I haven't timed this for dicts, but I did see major speed boosts
in the performance of set-to-set operations when the internally
stored hash was used instead of calling PyObject_Hash().
Raymond
More information about the Python-ideas
mailing list