• home
  • about
  • 全ての投稿
  • ソフトウェア・ハードウェアの設定のまとめ
  • 分析関連のまとめ
  • ヘルスケア関連のまとめ
  • 生涯学習関連のまとめ

python hash

date: 2023-06-03 excerpt: pythonのhash関数の使い方

tag: pythonhash


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))


pythonhash Share Tweet