dict.keys()
短いバージョン: Python 3で(おそらく)不変の辞書を誤って変更しないようにするために、友達をオーバーライドするための最良の方法は何ですか?
最近の質問で、Pythonで不変の辞書をハッシュすることについて尋ねました。それ以来、私は満足している不変でハッシュ可能な辞書を作成しました。しかし、私はそれに穴があることに気づきました。、によって返される辞書ビューkeys()
でitems()
あり、values()
それでも(おそらく)不変の辞書を誤って変更してしまう可能性があります。
辞書ビューについて私が見つけたStackOverflowに関する唯一の質問は、Pythonが辞書のサブセットの独自の辞書ビューを作成することでしたが、それは私の問題とはあまり関係がないようで、「凍結された辞書」とは何か?keys()
オーバーライドなどにはならないようでした。
このようなことをすることで、たとえば、不変の辞書のキーを誤って変更することを防ぐことができますか?
class FrozenCounter(collections.Counter):
"Model an hashable multiset as an immutable dictionary."
# ...
def keys(self):
return list(super().keys())
def values(self):
return list(super().values())
def items(self):
return list(super().items())
答えから集めたもの
主に読めません。
dictviewsはdictを変更できません。Python 3のドキュメントでは、「ディクショナリのエントリに動的なビューを提供します。つまり、ディクショナリが変更されると、ビューはこれらの変更を反映します」と誤解し、「ビューが変更されると、ディクショナリはこれらの変更を反映します」と誤解しました。明らかに、それはドキュメントが言ったことではありません。