pythonのhash関数の使い方
概要
- pythonのビルドイン関数の一つ
- python 3.3からセキュリティの観点で、毎回ランダム化される
- プログラム起動時に初期値
PYTHONHASHSEED
が設定されるので再現性が通常はない - 環境変数に
PYTHONHASHSEED=0
を与えると再現性が確保されるがセキュリティ的に脆弱になるとされている
- プログラム起動時に初期値
具体例
文字列のdigest値を得る
import ctypes
def myhash(word):
return ctypes.c_uint64(hash(word)).value.to_bytes(8,"big").hex()
aaaa = "うんち"
bbbb = "うんち"
print(myhash(aaaa), myhash(bbbb)) # f9d1cc55186b3382 f9d1cc55186b3382
ユーザ定義のオブジェクトに対してhashを実行できるようにする
- なお、
__hash__
にhashlibで実装すれば再現性が得られるものになる
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def __hash__(self):
return hash((self.name, self.age))