Pickleは、特定の入力値に対して常に同じ出力を生成しますか?内容は同じだが、挿入/削除の履歴が異なる辞書を拾うときには、問題があると思われる。私の目標は、Memoize実装のために、PickleとSHA1を使用して、関数の引数の "署名"を作成することです。酸洗い工程は決定的ですか?
7
A
答えて
7
内容は同じですが、挿入/削除の履歴が異なる辞書を拾い上げるときに、問題が発生する可能性があるとします。右
:
>>> pickle.dumps({1: 0, 9: 0}) == pickle.dumps({9: 0, 1: 0})
False
も参照してください:pickle.dumps not suitable for hashing
私の目標は、memoizeの実装のためのピクルスとSHA1を使用して、関数の引数の "署名" を作成することです。
これには多くの根本的な問題があります。オブジェクトのアイデンティティの問題を正しく考える平等をマップオブジェクトに文字列の変換を思い付くことは不可能それをです:
>>> a = object()
>>> b = object()
>>> a == b
False
>>> pickle.dumps(b) == pickle.dumps(a)
True
あなたの正確な要件に応じて、あなたがそのものにオブジェクト階層を変換することができるかもしれあなたはハッシュできます:
def hashablize(obj):
"""Convert a container hierarchy into one that can be hashed.
Don't use this with recursive structures!
Also, this won't be useful if you pass dictionaries with
keys that don't have a total order.
Actually, maybe you're best off not using this function at all."""
try:
hash(obj)
except TypeError:
if isinstance(obj, dict):
return tuple((k, hashablize(v)) for (k, v) in sorted(obj.iteritems()))
elif hasattr(obj, '__iter__'):
return tuple(hashablize(o) for o in obj)
else:
raise TypeError("Can't hashablize object of type %r" % type(obj))
else:
return obj
0
同じ出力はどういう意味ですか?通常、ラウンドトリップ(pickling - > unpickling)には常に同じ出力が得られるはずですが、シリアライズされた書式自体はすべての条件で同じであることが保証されているとは思いません。確かに、それはプラットフォームとそのすべての間で変わるかもしれません。
メモリングのために酸洗を使用することはうまくいくはずです - 私はこのスキームを何度も問題なく使用しましたが、それはかなり簡単な問題でした。 1つの問題は、これがすべての有用なケースをカバーしていないことです(関数が気になる:あなたがそれらをピケッとすることはできないので、関数が呼び出し可能な引数を取る場合、
関連する問題
- 1. 酸洗いすることはできませんがdefaultdict
- 2. 酸洗に伴う食い違いのエラー
- 3. Pythonで酸洗する間にEOFErrorが発生する
- 4. Ajaxコードはどの程度洗練されていますか?
- 5. Python:モジュールを酸洗する代わりに
- 6. プロトコル2を使用した酸洗:Python3-> 2データ
- 7. ウェブワーカーのpostMessage工程順
- 8. Scalaの酸洗の使用量は、MyObjectに - >アレイ[バイト] - > MyObjectに
- 9. のOauthリフレッシュトークンSalesforceの工程簡略化
- 10. javaのhashCode()は決定的ですか?
- 11. 解決機能方程式は、プログラム
- 12. 縦線で工程(区分)関数をプロット
- 13. スパース行列過決定線形方程式系C/C++ライブラリ
- 14. 人工ニューロンが発射する値を決定する方法は?
- 15. なぜこのopenclコードは非決定的ですか?
- 16. 工場はいつ適切ですか?
- 17. Pythonで方程式を解決するにはどうしたらいいですか?
- 18. Javaは決定的ではありませんか?
- 19. __setstate__を定義Aから継承したクラスB(多くの変数を持つ)、のオブジェクトを酸洗し、__getstate__する方法
- 20. アミノ酸の操作
- 21. 工場の女の子 - 目的は何ですか?
- 22. 工場パターンは一般的なシングルトンですか?
- 23. 決定論的アルゴリズムの例?
- 24. VB6動的配列決定
- 25. ディープラーニングと伝統的な人工ニューラルネットワークの学習の違いは何ですか?
- 26. amb-operatorで非決定的な選択
- 27. ストアドプロシージャでテーブル名を動的に決定
- 28. この非決定論的なFSAを決定論的なものに変換するにはどうすればよいですか?
- 29. のpython Picklerさん再帰の深さは、私は私のセルオートマトンクラスのインスタンスを酸洗しようとしているが、私はこのエラーを取得
- 30. 工場の機能の中で約束を解決する