Почему и как функции Python могут быть хэшируемыми?

Я недавно попробовал следующие команды в Python:

>>> {lambda x: 1: 'a'}
{<function __main__.<lambda>>: 'a'}

>>> def p(x): return 1
>>> {p: 'a'}
{<function __main__.p>: 'a'}

Успех обоихdict Creations указывает, что как лямбда-функции, так и обычные функции являются хэшируемыми. (Что-то вроде{[]: 'a'} не удается сTypeError: unhashable type: 'list').

Очевидно, хеш не обязательно является идентификатором функции:

>>> m = lambda x: 1
>>> id(m)
140643045241584
>>> hash(m)
8790190327599
>>> m.__hash__()
8790190327599

Последняя команда показывает, что__hash__ метод явно определен дляlambdas, то есть, это не какая-то автоматическая вещь, которую Python вычисляет на основе типа.

Какова мотивация сделать функции хэшируемыми? Для бонуса, каков хэш функции?

Ответы на вопрос(3)

Ваш ответ на вопрос