Неожиданное усечение Python Hash

У меня есть обычай __hash__ функция.

Я знаю что hash(object) усекает до указанной целочисленной ширины. Это 64 в моей системе.

Однако если & 0xffffffffffffffff значение, которое выбрасывается из моей пользовательской хэш-функции, иногда (но не всегда!) видоизменяется усечением.

В чем дело?

1 ответ

Хэши Python - это целые числа со знаком. Ваш __hash__ выходные данные могут помещаться в 64-разрядное целое число без знака, но не обязательно со знаком. (Кроме того, это не усечение, которое вы видите.)

Другие вопросы по тегам