問題タブ [hashable]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - Python で可変性をチェックしますか?
このコードを検討してください:
- 変更可能性は辞書のキーと値でどのような役割を果たしますか?
- ある dict のキーまたは値への変更が他の dict に反映されないようにするにはどうすればよいですか?
- これは、辞書キーのハッシュ可能な制約とどのように関係していますか?
- Python 2.x と Python 3.x で動作に違いはありますか?
Python で型が変更可能かどうかを確認するにはどうすればよいですか?
iphone - ネットワーク接続の警告
Tweetie (現在は Twitter) アプリには、ポップアップ ネットワーク到達可能性警告があります。これは、Foursquare および Hashable アプリでも行われました (私の知る限り)。この実装のサンプルコードはどこかにありますか? ありがとう。
python - 辞書の引数で@functools.lru_cacheを使用する
私は(とりわけ)辞書を引数として取るメソッドを持っています。このメソッドは文字列を解析し、辞書は一部の部分文字列の代わりを提供するため、変更可能である必要はありません。
この関数は頻繁に呼び出され、冗長な要素で呼び出されるため、キャッシュすると効率が向上すると思いました。
しかし、dict
ご想像のとおり、は変更可能でハッシュ化@functools.lru_cache
できないため、関数を装飾することはできません。では、どうすればこれを克服できますか?
標準ライブラリのクラスとメソッドのみが必要な場合のボーナスポイント。理想的には、私が見たことのないある種のfrozendict
標準ライブラリが存在する場合、それは私の一日になります。
PS:namedtuple
構文を大幅に変更する必要があるため、最後の手段としてのみ。
python - Pythonでリストをdictキーとして使用できないのはなぜですか?
Pythondictのキーとして使用できるものと使用できないものについて少し混乱しています。
したがって、タプルは不変の型ですが、その中にリストを非表示にすると、それをキーにすることはできません。モジュール内にリストを簡単に非表示にすることはできませんか?
キーは「ハッシュ可能」でなければならないという漠然とした考えがありましたが、技術的な詳細についての私自身の無知を認めるつもりです。ここで実際に何が起こっているのかわかりません。たとえば、メモリの場所としてハッシュを使用して、リストをキーとして使用しようとすると、何が問題になりますか?
python - タプルを辞書のキーとして使用できませんか?
コードは少し複雑です。申し訳ありません。機能に注目してくださいparallel_p
。はsign
タプルですが、Python は不平を言います:
if sign in hashtable
を与えますTypeError
。なぜタプルではなく a なのですかsign
? numpy.ndarray
タプルとして作成しました。
テスト モジュール内
出力:
python - Pythonで「あらゆる深さの不変性」をテストする方法は?
私はPythonオブジェクトを「どの深さでも不変」であると定義しています
- それは(名目上)不変です。と
- 「コンテナ」オブジェクトの場合、「どの深さでも不変」なオブジェクトのみが含まれます。
たとえば((1, 2), (3, 4))
、任意の深さで不変ですが、((1, 2), [3, 4])
そうではありません (後者は、タプルであるため、「名目上」不変ですが)。
Python オブジェクトが「どの深さでも不変」かどうかをテストする合理的な方法はありますか?
最初の条件 (例えば、collections.Hashable
クラスを使用し、不適切に実装されたメソッドの可能性を無視する__hash__
) をテストするのは比較的簡単ですが、2 番目の条件をテストするのはより困難です。 「コンテンツ」を繰り返し処理しています...
ありがとう!
python - Making a list subclass hashable
I want to derive a class from list
, add a few instance attributes to it, and make it hashable. What is a good (fast and neat) way to do it?
UPDATE:
I deleted a lengthy explanation of a use case. I also moved a related but separate issue into a different question.
python - ユーザー定義クラスをハッシュ不可にする理由は何ですか?
ドキュメントには、__hash__
メソッドとメソッドが定義されている限り、クラスはハッシュ可能であると書かれています__eq__
。でも:
何がX
ハッシュ不可能なのか?
同じ値にハッシュするには、(通常の等価性に関して) 同一のリストが必要であることに注意してください。そうしないと、ハッシュ関数に関するこの要件に違反します。
唯一の必要なプロパティは、等しいと比較されるオブジェクトは同じハッシュ値を持つということです
ドキュメントは、ハッシュ可能なオブジェクトをその存続期間中に変更してはならないことを警告しています。もちろん、X
作成後のインスタンスは変更しません。もちろん、インタプリタはとにかくそれをチェックしません。
python - クラスを自動的にハッシュ可能にする
クラスをハッシュ可能にする標準的な方法がいくつかあります。たとえば ( SOから借用):
ここで、ハッシュ可能にしたいクラスがたくさんあるとします。それらはすべて不変であり、不変の属性を持ち、これらすべての属性をまとめてハッシュすることは許容されます (属性が多すぎるクラスの場合、ほとんどの衝突を回避するのに十分ないくつかの属性のみをハッシュする必要があります)。__key()
クラスごとにメソッドを手動で記述することを避けることはできますか?
__key()
、__eq__
、を定義する基本クラスを作成するのは良い考え__hash__
でしょうか? 特に、入力する必要があるすべてのインスタンス属性を見つけることができるかどうか__hash__
はわかりません。これは一般的に不可能であることはわかっていますが、この場合、オブジェクトについてより多くのことを想定できます (たとえば、オブジェクトは不変__init__
です - 終了後、その属性はすべてハッシュ可能など)。
(継承階層が機能しない場合は、おそらくデコレータで機能しますか?)
python - 大きなハッシュ可能なオブジェクトの重複を避ける別の方法はありますか?
私はテキストを処理しており、ハッシュ可能なオブジェクトの大きなシーケンスを保存する必要があります-時には文字列、時には単語のタプルなどです.ハッシュ関数を使用して単純なストアと取得クラスを提供することを考えていましたが、私の最初のアプローチでは1 つのハッシュ キーが複数のアイテムに解決される可能性があります。add の戻り値を引数として取る get 関数を追加すると、リスト内のどの項目を返すかわかりません。
別のアプローチでは、一意のハッシュ可能なアイテムごとに 1 つのマッピングのみが存在することが保証されます。
これは機能し、add の戻り値を使用して一意の値を返すことが保証されます。少し不器用なようです。この状況を処理するためのより良い、より Pythonic な方法はありますか?
私は質問に関してあいまいでした。2 つの問題があります。1 つは、現在、それぞれ数百から数千バイトの範囲のキーを使用している何百万ものオブジェクトがあることです (big_hashable のもの)。それらを整数に変換すると、現在よりも多くのデータを処理できるようになります。第二に、各 big_hashable の単一の正規コピーのみを保持すると、メモリ使用量も削減されますが、各キーは実際には big_hashable の個別のコピーであるため、私の質問を引き起こしている最初の問題です。