1. ホーム
  2. python

[解決済み] ハッシャブル、イミュータブル

2023-04-04 06:01:33

質問

最近のSOの質問から( リストでインデックスされたpythonの辞書を作成する )から、私はおそらくpythonにおけるハッシュ可能なオブジェクトと不変のオブジェクトの意味について間違った概念を持っていたことに気づきました。

  • 実際、hashable は何を意味するのでしょうか?
  • hashable と immmutable の関係は?
  • ハッシュ可能なmutableオブジェクトやハッシュ不可能なimmutableオブジェクトは存在するのでしょうか?

どのように解決するのですか?

ハッシュ化 とは、ある大量のデータをより小さな量(通常は単一の整数)に反復可能な方法で変換し、定常的にテーブルで検索できるようにするプロセスです ( O(1) ) でテーブルを検索できるようにするプロセスであり、高性能なアルゴリズムやデータ構造にとって重要なものです。

不変性 とは、オブジェクトが作成された後、特にそのオブジェクトのハッシュ値を変更するような重要な方法で変更されないという考え方です。

この 2 つの考え方は、ハッシュ キーとして使用されるオブジェクトは通常、ハッシュ値が変更されないように不変でなければならないので、関連しています。 もし変更が許されるなら、ハッシュテーブルのようなデータ構造におけるそのオブジェクトの位置は変わり、効率のためのハッシュの目的全体が失われることになります。

この考えを本当に理解するには、C/C++のような言語で独自のハッシュテーブルを実装してみるか、Javaの HashMap クラスのJava実装を読んでみてください。