Отображения с изменяемыми объектами в качестве ключей, как правило, сложны. Это действительно то, что вы хотите? Если вы считаете, что ваши объекты неизменяемы (в Python нет способа действительно обеспечить неизменность) или вы знаете, что они не будут изменены, пока они используются в качестве ключей в отображении, вы можете реализовать для них свою собственную хеш-функцию несколько путей. Например, если ваш объект имеет только хешируемые данные-члены, вы можете вернуть хэш кортежа всех членов-данных в качестве хеша объекта.
Если ваш объект похож на диктовку, вы можете использовать хэш frozenset всех пар ключ-значение.
def __hash__(self):
return hash(frozenset(self.iteritems()))
Это работает, только если все значения могут быть хэшируемыми. Чтобы сохранить пересчеты хешей (что будет сделано при каждом поиске), вы можете кэшировать хеш-значение и просто пересчитать его, если установлен какой-нибудь флаг dirty.