# API do PyHash

Veja também o membro `PyTypeObject.tp_hash` e Hashing de tipos numéricos.

type Py_hash_t

  Tipo de valor do hash: inteiro com sinal.

  Adicionado na versão 3.2.

type Py_uhash_t

  Tipo de valor do hash: inteiro sem sinal.

  Adicionado na versão 3.2.

Py_HASH_ALGORITHM

  Um valor numérico que indica o algoritmo de hash para `str`, `bytes` e `memoryview`.

  O nome do algoritmo é exposto por `sys.hash_info.algorithm`.

  Adicionado na versão 3.4.

Py_HASH_FNV
Py_HASH_SIPHASH24
Py_HASH_SIPHASH13

  Valores numéricos a serem comparados com `Py_HASH_ALGORITHM` para determinar qual algoritmo é usado para o hashing. O algoritmo de hash pode ser configurado através da opção `--with-hash-algorithm` do comando configure.

  Adicionado na versão 3.4: Adiciona `Py_HASH_FNV` e `Py_HASH_SIPHASH24`.

  Adicionado na versão 3.11: Adiciona `Py_HASH_SIPHASH13`.

Py_HASH_CUTOFF

  Buffers de comprimento no intervalo `[1, Py_HASH_CUTOFF)` são hasheados usando DJBX33A em vez do algoritmo descrito por `Py_HASH_ALGORITHM`.

  - Uma `Py_HASH_CUTOFF` de 0 desabilita a otimização.

  - `Py_HASH_CUTOFF` deve ser não-negativo ou menor ou igual a 7.

  Plataformas de 32 bits devem usar um limite de corte menor do que plataformas de 64 bits, pois é mais fácil criar strings que colidam. Um limite de corte de 7 em plataformas de 64 bits e 5 em plataformas de 32 bits deve fornecer uma margem de segurança adequada.

  Isso corresponde à constante `sys.hash_info.cutoff`.

  Adicionado na versão 3.4.

PyHASH_MODULUS

  O primo de Mersenne `P = 2**n -1`, usado para esquema de hash numérico.

  Isso corresponde à constante `sys.hash_info.modulus`.

  Adicionado na versão 3.13.

PyHASH_BITS

  O expoente `n` de `P` em `PyHASH_MODULUS`.

  Adicionado na versão 3.13.

PyHASH_MULTIPLIER

  Multiplicador de primo usado em strings e vários outros hashes.

  Adicionado na versão 3.13.

PyHASH_INF

  O valor de hash retornado para um infinito positivo.

  Isso corresponde à constante `sys.hash_info.inf`.

  Adicionado na versão 3.13.

PyHASH_IMAG

  O multiplicador usado para a parte imaginária de um número complexo.

  Isso corresponde à constante `sys.hash_info.imag`.

  Adicionado na versão 3.13.

type PyHash_FuncDef

  Definição de função de hash usada por `PyHash_GetFuncDef()`.

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

    Função de hash.

  const char *name

    Nome de função hash (string codificada em UTF-8).

    Isso corresponde à constante `sys.hash_info.algorithm`.

  const int hash_bits

    Tamanho interno do valor do hash em bits.

    Isso corresponde à constante `sys.hash_info.hash_bits`.

  const int seed_bits

    Tamanho da entrada de seed em bits.

    Isso corresponde à constante `sys.hash_info.seed_bits`.

  Adicionado na versão 3.4.

PyHash_FuncDef *PyHash_GetFuncDef(void)

  Obtém a definição de função de hash.

  Ver também

  PEP 456 “Algoritmo de hash seguro e intercambiável”.

  Adicionado na versão 3.4.

Py_hash_t Py_HashPointer(const void *ptr)

  Hash de um valor de ponteiro: processa o valor do ponteiro como um inteiro (converte-o para `uintptr_t` internamente). O ponteiro não é desreferenciado.

  A função não pode falhar: ela não pode retornar `-1`.

  Adicionado na versão 3.13.

Py_hash_t Py_HashBuffer(const void *ptr, Py_ssize_t len)

  Calcula e retorna o valor de hash de um buffer de len bytes, começando no endereço ptr. O hash tem garantia de corresponder ao de `bytes`, `memoryview` e outros objetos embutidos que implementam o protocolo de buffer.

  Usa esta função para implementar hash para objetos imutáveis cuja função `tp_richcompare` compara ao buffer de outro objeto.

  len deve ser maior que ou igual a `0`.

  Esta função sempre tem sucesso.

  Adicionado na versão 3.14.

Py_hash_t PyObject_GenericHash(PyObject *obj)

  Função de hash genérica que deve ser colocada no slot `tp_hash` de um objeto de tipo. Seu resultado depende apenas da identidade do objeto.

  No CPython, é equivalente a `Py_HashPointer()`.

  Adicionado na versão 3.13.