hash.md
1> **Источник:** https://python-all.ru/3.14/c-api/hash.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# PyHash API89См. также член [`PyTypeObject.tp_hash`](https://python-all.ru/3.14/c-api/typeobj.html#c.PyTypeObject.tp_hash) и [хэширование числовых типов](https://python-all.ru/3.14/library/stdtypes.html#numeric-hash).1011#### `type Py_hash_t`1213Тип хэш-значения: знаковое целое.1415Добавлено в версии 3.2.1617#### `type Py_uhash_t`1819Тип хэш-значения: беззнаковое целое.2021Добавлено в версии 3.2.2223#### `Py_HASH_ALGORITHM`2425Числовое значение, указывающее алгоритм хэширования для [`str`](https://python-all.ru/3.14/library/stdtypes.html#str), [`bytes`](https://python-all.ru/3.14/library/stdtypes.html#bytes) и [`memoryview`](https://python-all.ru/3.14/library/stdtypes.html#memoryview).2627Имя алгоритма предоставляется [`sys.hash_info.algorithm`](https://python-all.ru/3.14/library/sys.html#sys.hash_info.algorithm).2829Добавлено в версии 3.4.3031#### `Py_HASH_FNV`3233#### `Py_HASH_SIPHASH24`3435#### `Py_HASH_SIPHASH13`3637Числовые значения для сравнения с [`Py_HASH_ALGORITHM`](https://python-all.ru/3.14/c-api/hash.html#c.Py_HASH_ALGORITHM), чтобы определить, какой алгоритм используется для хэширования. Алгоритм хэширования можно настроить с помощью опции configure [`--with-hash-algorithm`](https://python-all.ru/3.14/using/configure.html#cmdoption-with-hash-algorithm).3839Добавлено в версии 3.4: Добавлены `Py_HASH_FNV` и `Py_HASH_SIPHASH24`.4041Добавлено в версии 3.11: Добавлен `Py_HASH_SIPHASH13`.4243#### `Py_HASH_CUTOFF`4445Буферы длиной в диапазоне `[1, Py_HASH_CUTOFF)` хэшируются с помощью DJBX33A вместо алгоритма, описанного [`Py_HASH_ALGORITHM`](https://python-all.ru/3.14/c-api/hash.html#c.Py_HASH_ALGORITHM).4647- Значение `Py_HASH_CUTOFF`, равное 0, отключает оптимизацию.48- `Py_HASH_CUTOFF` должно быть неотрицательным и меньше или равно 7.495032-битные платформы должны использовать порог меньше, чем 64-битные, потому что легче создавать конфликтующие строки. Порог 7 на 64-битных платформах и 5 на 32-битных платформах должен обеспечивать приемлемый запас надёжности.5152Это соответствует константе [`sys.hash_info.cutoff`](https://python-all.ru/3.14/library/sys.html#sys.hash_info.cutoff).5354Добавлено в версии 3.4.5556#### `PyHASH_MODULUS`5758Простое число [Мерсенна](https://python-all.ru/3.14/c-api/hash.html) `P = 2**n -1`, используемое для схемы числового хэширования.5960Это соответствует константе [`sys.hash_info.modulus`](https://python-all.ru/3.14/library/sys.html#sys.hash_info.modulus).6162Добавлено в версии 3.13.6364#### `PyHASH_BITS`6566Показатель степени `n` числа `P` в [`PyHASH_MODULUS`](https://python-all.ru/3.14/c-api/hash.html#c.PyHASH_MODULUS).6768Добавлено в версии 3.13.6970#### `PyHASH_MULTIPLIER`7172Простой множитель, используемый в строковых и различных других хэшах.7374Добавлено в версии 3.13.7576#### `PyHASH_INF`7778Хэш-значение, возвращаемое для положительной бесконечности.7980Это соответствует константе [`sys.hash_info.inf`](https://python-all.ru/3.14/library/sys.html#sys.hash_info.inf).8182Добавлено в версии 3.13.8384#### `PyHASH_IMAG`8586Множитель, используемый для мнимой части комплексного числа.8788Это соответствует константе [`sys.hash_info.imag`](https://python-all.ru/3.14/library/sys.html#sys.hash_info.imag).8990Добавлено в версии 3.13.9192#### `type PyHash_FuncDef`9394Определение хэш-функции, используемое [`PyHash_GetFuncDef()`](https://python-all.ru/3.14/c-api/hash.html#c.PyHash_GetFuncDef).9596#### `Py_hash_t (*const hash)(const void*, Py_ssize_t)`9798Хэш-функция.99100#### `const char *name`101102Имя хэш-функции (строка в кодировке UTF-8).103104Это соответствует константе [`sys.hash_info.algorithm`](https://python-all.ru/3.14/library/sys.html#sys.hash_info.algorithm).105106#### `const int hash_bits`107108Внутренний размер хэш-значения в битах.109110Это соответствует константе [`sys.hash_info.hash_bits`](https://python-all.ru/3.14/library/sys.html#sys.hash_info.hash_bits).111112#### `const int seed_bits`113114Размер входных данных seed в битах.115116Это соответствует константе [`sys.hash_info.seed_bits`](https://python-all.ru/3.14/library/sys.html#sys.hash_info.seed_bits).117118Добавлено в версии 3.4.119120#### `PyHash_FuncDef *PyHash_GetFuncDef(void)`121122Получить определение хэш-функции.123124> **См. также**125>126> [**PEP 456**](https://python-all.ru/3.14/c-api/hash.html) «Безопасный и взаимозаменяемый хэш-алгоритм».127128Добавлено в версии 3.4.129130#### `Py_hash_t Py_HashPointer(const void *ptr)`131132Вычислить хэш значения указателя: обработать значение указателя как целое число (привести его к типу `uintptr_t` внутри). Указатель не разыменовывается.133134Функция не может завершиться ошибкой: она не может вернуть `-1`.135136Добавлено в версии 3.13.137138#### `Py_hash_t Py_HashBuffer(const void *ptr, Py_ssize_t len)`139140Вычислить и вернуть хэш-значение буфера размером *len* байт, начиная с адреса *ptr*. Гарантируется, что хэш совпадает с хэшем [`bytes`](https://python-all.ru/3.14/library/stdtypes.html#bytes), [`memoryview`](https://python-all.ru/3.14/library/stdtypes.html#memoryview) и других встроенных объектов, реализующих [протокол буфера](https://python-all.ru/3.14/c-api/buffer.html#bufferobjects).141142Используйте эту функцию для реализации хэширования неизменяемых объектов, чья функция [`tp_richcompare`](https://python-all.ru/3.14/c-api/typeobj.html#c.PyTypeObject.tp_richcompare) сравнивается с буфером другого объекта.143144*len* должен быть больше или равен `0`.145146Эта функция всегда завершается успешно.147148Добавлено в версии 3.14.149150#### `Py_hash_t PyObject_GenericHash(PyObject *obj)`151152Общая хэш-функция, предназначенная для помещения в слот `tp_hash` объекта типа. Её результат зависит только от идентичности объекта.153154**Детали реализации CPython:** В CPython она эквивалентна [`Py_HashPointer()`](https://python-all.ru/3.14/c-api/hash.html#c.Py_HashPointer).155156Добавлено в версии 3.13.157