New submission from Raymond Hettinger:

The code for dict_equal() in Objects/dictobject.c currently loops over the 
key/value pairs in self and uses PyDict_GetItem() to check for the 
corresponding key/value pair in the other dictionary.  This causes an 
unnecessary call to PyObject_Hash().

Instead, the code should loop over the key/value/hash triplets in self and do a 
direct lookup in the other dictionary with " ep = 
(otherdict->ma_lookup)(otherdict, key, hash)".   The reuses the known hash 
value for the key; thereby avoiding the potentially slow call to 
PyObject_Hash().

See _PyDict_Contains() for an example of how to do a lookup when the hash value 
is already known.

Note, the optimized path should be used only when PyDict_CheckExact() is true.

----------
components: Interpreter Core
keywords: easy
messages: 176453
nosy: rhettinger
priority: low
severity: normal
status: open
title: Optimize dict equality test
type: performance
versions: Python 3.4

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue16562>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to