@Druss: правильно.

Рэнсом ответил наТАК вопрос о хешах здесь, в SO:

<, p> [...] Объект является хешируемым, если он имеет хеш-значениекоторый никогда не меняется в течение жизни, Таким образом, по официальному определению, все изменяемое не может быть хэшируемым, даже если оно имеет__hash__()&nbsp;функция. Мое утверждение о том, что оба требования являются необходимыми, не соответствует действительности, потому что хэшируемость уже подразумевает требование быть неизменным.

Я хочу убедиться, что я понял это правильно - даже если я не являюсь носителем языка - поэтому я надеюсь, что кто-то исправит меня, если я ошибаюсь.

Предполагая этот класс

class Author(object):
    def __init__(self, id, name, age):
        self.id = id
        self.name = name
        self.age = age

    def __eq__(self, other):
        return self.id==other.id\
               and self.name==other.name

    def __hash__(self):
        return hash(('id', self.id,
                     'name', self.name))

Я это понимаю__eq__&nbsp;позволяет мне сравнивать объекты этого класса с==&nbsp;оператор. Из отметок ответа я понимаю, что даже если мой объектpeter = Author(1, "Peter", 33)&nbsp;имеет__hash__&nbsp;это не хэшируемый, потому что я потенциально мог бы сделать что-то вродеpeter.age = 43&nbsp;что означает, что это не является неизменным. Так что мои объекты классаAuthor&nbsp;не являются хэшируемыми и поэтому не могут использоваться как ключи в словарях, например? Я понял правильно или мне кажется, что мне нужно больше объяснений? :-)