¿Qué hace que las listas sean inestables?

Así que las listas son inestables:

>>> { [1,2]:3 } TypeError: unhashable type: 'list' 

La siguiente página da una explicación:

Una lista es de tipo mutable y no se puede usar como una clave en un diccionario (podría cambiar en el lugar y la clave ya no se podrá ubicar en la tabla hash interna del diccionario).

Entiendo por qué es indeseable utilizar objetos mutables como claves de diccionario. Sin embargo, Python genera la misma excepción incluso cuando simplemente estoy tratando de hacer una lista (independientemente de la creación del diccionario)

 >>> hash( [1,2] ) TypeError: unhashable type: 'list' 

¿Python hace esto como garantía de que los tipos mutables nunca se utilizarán como claves de diccionario? ¿O hay otra razón que hace que los objetos mutables sean imposibles de hash, independientemente de cómo planee usarlos?

Los diccionarios y los conjuntos utilizan algoritmos de hashing para determinar de forma única un elemento. Y esos algoritmos hacen uso de los elementos utilizados como claves para obtener el valor hash único. Dado que las listas son mutables, el contenido de una lista puede cambiar. Después de permitir que una lista esté en un diccionario como clave, si el contenido de la lista cambia, el valor de hash también cambiará. Si el valor de hash cambia después de que se almacena en una ranura en particular en el diccionario, dará lugar a un diccionario inconsistente. Por ejemplo, inicialmente la lista se habría almacenado en la ubicación A, que se determinó en función del valor hash. Si el valor de hash cambia, y si buscamos la lista, es posible que no lo encontremos en la ubicación A , o según el nuevo valor de hash, podemos encontrar algún otro objeto.

Dado que, no es posible obtener un valor de hash, internamente no hay una función de hashing definida para las listas .

 PyObject_HashNotImplemented, /* tp_hash */ 

Como la función de hash no se implementa, cuando la usa como una clave en el diccionario, o intenta forzosamente obtener el valor de hash con la función de hash , falla al hacerlo y por lo tanto falla con un tipo no manejable

 TypeError: unhashable type: 'list'