¿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}