PyHash API

PyTypeObject.tp_hash メンバや 数値型のハッシュ化 も参照してください。

type Py_hash_t

ハッシュ値型: 符号付き整数。

Added in version 3.2.

type Py_uhash_t

ハッシュ値型: 符号なし整数。

Added in version 3.2.

Py_HASH_ALGORITHM

str、bytes、memoryview のハッシュに使うアルゴリズムを示す数値です。

アルゴリズム名は sys.hash_info.algorithm により公開されます。

Added in version 3.4.

Py_HASH_FNV
Py_HASH_SIPHASH24
Py_HASH_SIPHASH13
Py_HASH_EXTERNAL

ハッシュに使うアルゴリズムを判定するために Py_HASH_ALGORITHM と比較する数値です。 組み込みのハッシュアルゴリズムは、configure の --with-hash-algorithm オプションで設定できます。

Py_HASH_EXTERNAL の値は 0 で、Python を組み込むアプリケーションが提供するハッシュ実装を表します。 PyHash_Func を参照してください。

Added in version 3.4: Py_HASH_FNV、Py_HASH_SIPHASH24、Py_HASH_EXTERNAL を追加しました。

Added in version 3.11: Py_HASH_SIPHASH13 を追加しました。

Py_HASH_CUTOFF

長さが [1, Py_HASH_CUTOFF) の範囲にあるバッファのハッシュには、Py_HASH_ALGORITHM が示すアルゴリズムの代わりに DJBX33A を使います。

  • Py_HASH_CUTOFF を 0 にすると、この最適化は無効になります。

  • Py_HASH_CUTOFF は 0 以上 7 以下でなければなりません。

32 ビットのプラットフォームでは衝突する文字列を作成しやすいため、64 ビットのプラットフォームよりも小さい閾値を使うべきです。 64 ビットでは 7、32 ビットでは 5 を閾値にすると、十分な安全の余裕が得られるはずです。

sys.hash_info.cutoff 定数に対応します。

Added in version 3.4.

PyHASH_MODULUS

数値のハッシュ方式で使う メルセンヌ素数 P = 2**n -1。

sys.hash_info.modulus 定数に対応します。

Added in version 3.13.

PyHASH_BITS

PyHASH_MODULUS の P の指数 n。

Added in version 3.13.

PyHASH_MULTIPLIER

文字列などさまざまなハッシュで乗数として使う素数。

Added in version 3.13.

PyHASH_INF

正の無限大に対して返すハッシュ値。

sys.hash_info.inf 定数に対応します。

Added in version 3.13.

PyHASH_IMAG

複素数の虚部に使う乗数。

sys.hash_info.imag 定数に対応します。

Added in version 3.13.

type PyHash_FuncDef

PyHash_GetFuncDef() が使うハッシュ関数の定義。

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

ハッシュ関数。

const char *name

ハッシュ関数の名前 (UTF-8 エンコードの文字列)。

sys.hash_info.algorithm 定数に対応します。

const int hash_bits

ハッシュ値の内部でのサイズ (ビット単位)。

sys.hash_info.hash_bits 定数に対応します。

const int seed_bits

シード入力のサイズ (ビット単位)。

sys.hash_info.seed_bits 定数に対応します。

Added in version 3.4.

PyHash_FuncDef PyHash_Func

Py_HASH_ALGORITHM を Py_HASH_EXTERNAL に設定して Python をビルドする場合、Python を組み込むアプリケーションはこの変数を定義する必要があります。 これにより、Python の組み込みハッシュアルゴリズムの代わりに使うハッシュ実装を提供します。

Added in version 3.4.

バージョン 3.15 で非推奨、バージョン 3.19 で削除予定: 代わりに組み込みのハッシュアルゴリズムを使ってください。

PyHash_FuncDef *PyHash_GetFuncDef(void)

ハッシュ関数の定義を取得します。

参考

PEP 456 「安全で交換可能なハッシュアルゴリズム」。

Added in version 3.4.

Py_hash_t Py_HashPointer(const void *ptr)

ポインタ値のハッシュを計算します。 ポインタ値を整数として処理します (内部では uintptr_t にキャストします)。 ポインタの参照先にはアクセスしません。

この関数は失敗しません。 -1 を返すことはありません。

Added in version 3.13.

Py_hash_t Py_HashBuffer(const void *ptr, Py_ssize_t len)

アドレス ptr を先頭とする長さ len バイトのバッファのハッシュ値を計算して返します。 このハッシュ値は、bytes、memoryview など バッファプロトコル を実装する組み込みオブジェクトのハッシュ値と一致することが保証されています。

tp_richcompare 関数でほかのオブジェクトのバッファと比較する不変オブジェクトに、ハッシュ計算を実装する場合に使ってください。

len は 0 以上でなければなりません。

この関数は常に成功します。

Added in version 3.14.

Py_hash_t PyObject_GenericHash(PyObject *obj)

型オブジェクトの tp_hash スロットに設定するための汎用ハッシュ関数です。 結果はオブジェクトの同一性だけで決まります。

CPython では Py_HashPointer() と同等です。

Added in version 3.13.