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 

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 <>
Python-bugs-list mailing list

Reply via email to