¿Cuál es el valor predeterminado de __hash__ en python?

A menudo utilizo cosas funky como claves para los diccionarios, y por lo tanto, me pregunto cuál es la forma correcta de hacerlo, y esto pasa por implementar buenos métodos de hash para mis objetos. Soy consciente de otras preguntas formuladas aquí comobuena manera de implementarpicadillo, pero me gustaría entender cómo el defecto__hash__ Funciona para objetos personalizados, y si es posible confiar en él.

He notado que los mutables son explícitamente inestables desdehash({}) genera un error ... pero extrañamente, las clases personalizadas son hashable:

>>> class Object(object): pass
>>> o = Object()
>>> hash(o)

Entonces, ¿alguien sabe cómo funciona esta función hash predeterminada? Al entender esto, me gustaría saber:

¿Puedo confiar en este hash predeterminado, si pongo objetos del mismo tipo que las claves de un diccionario? p.ej. :

key1 = MyObject()
key2 = MyObject()
key3 = MyObject()
{key1: 1, key2: 'blabla', key3: 456}

¿Puedo confiar en él si uso objetos de diferentes tipos como claves en un diccionario? p.ej.

{int: 123, MyObject(10): 'bla', 'plo': 890}

Y también en el último caso, ¿cómo asegurarme de que mis hashes personalizados no coincidan con los hashes integrados? p.ej :

{int: 123, MyObject(10): 'bla', MyObjectWithCustomHash(123): 890}

Respuestas a la pregunta(6)

Su respuesta a la pregunta