> **Источник:** https://python-all.ru/3.16/c-api/hash.html
>
> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.

---

# PyHash API

См. также член [`PyTypeObject.tp_hash`](https://python-all.ru/3.16/c-api/typeobj.html#c.PyTypeObject.tp_hash) и [хэширование числовых типов](https://python-all.ru/3.16/library/stdtypes.html#numeric-hash).

#### `type Py_hash_t`

Тип хэш-значения: знаковое целое.

Добавлено в версии 3.2.

#### `type Py_uhash_t`

Тип хэш-значения: беззнаковое целое.

Добавлено в версии 3.2.

#### `Py_HASH_ALGORITHM`

Числовое значение, указывающее алгоритм хэширования для [`str`](https://python-all.ru/3.16/library/stdtypes.html#str), [`bytes`](https://python-all.ru/3.16/library/stdtypes.html#bytes) и [`memoryview`](https://python-all.ru/3.16/library/stdtypes.html#memoryview).

Имя алгоритма предоставляется [`sys.hash_info.algorithm`](https://python-all.ru/3.16/library/sys.html#sys.hash_info.algorithm).

Добавлено в версии 3.4.

#### `Py_HASH_FNV`

#### `Py_HASH_SIPHASH24`

#### `Py_HASH_SIPHASH13`

Числовые значения для сравнения с [`Py_HASH_ALGORITHM`](https://python-all.ru/3.16/c-api/hash.html#c.Py_HASH_ALGORITHM), чтобы определить, какой алгоритм используется для хэширования. Алгоритм хэширования можно настроить с помощью опции configure [`--with-hash-algorithm`](https://python-all.ru/3.16/using/configure.html#cmdoption-with-hash-algorithm).

Добавлено в версии 3.4: Добавлены `Py_HASH_FNV` и `Py_HASH_SIPHASH24`.

Добавлено в версии 3.11: Добавлен `Py_HASH_SIPHASH13`.

#### `Py_HASH_CUTOFF`

Буферы длиной в диапазоне `[1, Py_HASH_CUTOFF)` хэшируются с помощью DJBX33A вместо алгоритма, описанного [`Py_HASH_ALGORITHM`](https://python-all.ru/3.16/c-api/hash.html#c.Py_HASH_ALGORITHM).

- Значение `Py_HASH_CUTOFF`, равное 0, отключает оптимизацию.
- `Py_HASH_CUTOFF` должно быть неотрицательным и меньше или равно 7.

32-битные платформы должны использовать порог меньше, чем 64-битные, потому что легче создавать конфликтующие строки. Порог 7 на 64-битных платформах и 5 на 32-битных платформах должен обеспечивать приемлемый запас надёжности.

Это соответствует константе [`sys.hash_info.cutoff`](https://python-all.ru/3.16/library/sys.html#sys.hash_info.cutoff).

Добавлено в версии 3.4.

#### `PyHASH_MODULUS`

Простое число [Мерсенна](https://python-all.ru/3.16/c-api/hash.html) `P = 2**n -1`, используемое для схемы числового хэширования.

Это соответствует константе [`sys.hash_info.modulus`](https://python-all.ru/3.16/library/sys.html#sys.hash_info.modulus).

Добавлено в версии 3.13.

#### `PyHASH_BITS`

Показатель степени `n` числа `P` в [`PyHASH_MODULUS`](https://python-all.ru/3.16/c-api/hash.html#c.PyHASH_MODULUS).

Добавлено в версии 3.13.

#### `PyHASH_MULTIPLIER`

Простой множитель, используемый в строковых и различных других хэшах.

Добавлено в версии 3.13.

#### `PyHASH_INF`

Хэш-значение, возвращаемое для положительной бесконечности.

Это соответствует константе [`sys.hash_info.inf`](https://python-all.ru/3.16/library/sys.html#sys.hash_info.inf).

Добавлено в версии 3.13.

#### `PyHASH_IMAG`

Множитель, используемый для мнимой части комплексного числа.

Это соответствует константе [`sys.hash_info.imag`](https://python-all.ru/3.16/library/sys.html#sys.hash_info.imag).

Добавлено в версии 3.13.

#### `type PyHash_FuncDef`

Определение хэш-функции, используемое [`PyHash_GetFuncDef()`](https://python-all.ru/3.16/c-api/hash.html#c.PyHash_GetFuncDef).

#### `Py_hash_t (*const hash)(const void*, Py_ssize_t)`

Хэш-функция.

#### `const char *name`

Имя хэш-функции (строка в кодировке UTF-8).

Это соответствует константе [`sys.hash_info.algorithm`](https://python-all.ru/3.16/library/sys.html#sys.hash_info.algorithm).

#### `const int hash_bits`

Внутренний размер хэш-значения в битах.

Это соответствует константе [`sys.hash_info.hash_bits`](https://python-all.ru/3.16/library/sys.html#sys.hash_info.hash_bits).

#### `const int seed_bits`

Размер входных данных seed в битах.

Это соответствует константе [`sys.hash_info.seed_bits`](https://python-all.ru/3.16/library/sys.html#sys.hash_info.seed_bits).

Добавлено в версии 3.4.

#### `PyHash_FuncDef *PyHash_GetFuncDef(void)`

Получить определение хэш-функции.

> **См. также**
>
> [**PEP 456**](https://python-all.ru/3.16/c-api/hash.html) «Безопасный и взаимозаменяемый хэш-алгоритм».

Добавлено в версии 3.4.

#### `Py_hash_t Py_HashPointer(const void *ptr)`

Вычислить хэш значения указателя: обработать значение указателя как целое число (привести его к типу `uintptr_t` внутри). Указатель не разыменовывается.

Функция не может завершиться ошибкой: она не может вернуть `-1`.

Добавлено в версии 3.13.

#### `Py_hash_t Py_HashBuffer(const void *ptr, Py_ssize_t len)`

Вычислить и вернуть хэш-значение буфера размером *len* байт, начиная с адреса *ptr*. Гарантируется, что хэш совпадает с хэшем [`bytes`](https://python-all.ru/3.16/library/stdtypes.html#bytes), [`memoryview`](https://python-all.ru/3.16/library/stdtypes.html#memoryview) и других встроенных объектов, реализующих [протокол буфера](https://python-all.ru/3.16/c-api/buffer.html#bufferobjects).

Используйте эту функцию для реализации хэширования неизменяемых объектов, чья функция [`tp_richcompare`](https://python-all.ru/3.16/c-api/typeobj.html#c.PyTypeObject.tp_richcompare) сравнивается с буфером другого объекта.

*len* должен быть больше или равен `0`.

Эта функция всегда завершается успешно.

Добавлено в версии 3.14.

#### `Py_hash_t PyObject_GenericHash(PyObject *obj)`

Общая хэш-функция, предназначенная для помещения в слот `tp_hash` объекта типа. Её результат зависит только от идентичности объекта.

**Детали реализации CPython:** В CPython она эквивалентна [`Py_HashPointer()`](https://python-all.ru/3.16/c-api/hash.html#c.Py_HashPointer).

Добавлено в версии 3.13.
