Мне этот ваш питон... Маму его на улице гулял. И доматруба шатал. Ну как так-то? И мне оченьнравится формулировка на python-reference: For ordinary integers, the hash value is simply the integer itself (unless it’s -1). Пришлось идти гуглить что за ordinary integers такие, так лучше бы я этого не делал вовсе. Там страшный матан. А ещё мне нравится, что причины такой петрушки зарыты глубоко в CPython, который, сюрпри-сюрприз, написан на C. А так уже получилось, что в C, если тебе надо предусмотреть у функции возможность вываливаться с ошибкой, то она должна возвращать -1. И очень похоже что ноги растут от туда т.к. hash(-1) = -2 прибито гвоздями.

Мне этот ваш питон... Маму его на улице гулял. И доматруба шатал | Сетка — социальная сеть от hh.ru