Explicación necesaria con respecto a la explicación de objetos hashables

Mark Ransom respondió en unSO pregunta sobre hashes aquí en SO:

<, p> [...] Un objeto es hashable si tiene un valor hashque nunca cambia durante su vida útil. Entonces, según la definición oficial, cualquier cosa mutable no puede ser hashaable, incluso si tiene un__hash__() Función. Mi afirmación acerca de que ambos requisitos son necesarios es falsa, porque ser hashaable ya implica que el requisito sea inmutable.

Quiero asegurarme de que acerté, incluso como hablante no nativo, así que espero que alguien me corrija si me equivoco.

Asumiendo esta clase

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))

Entiendo que__eq__ me permite comparar objetos de esta clase con== operador. De la respuesta de Marks entiendo que incluso si mi objetopeter = Author(1, "Peter", 33) tiene un__hash__ no es hashaable porque potencialmente podría hacer algo comopeter.age = 43 lo que significa que no es inmutable. Entonces mis objetos de la claseAuthor no son hashaable y, por lo tanto, no se pueden usar como claves en los diccionarios por ejemplo? ¿Lo hice bien o parece que necesito más explicaciones? : -)

Respuestas a la pregunta(1)

Su respuesta a la pregunta