私はPython 3 The Quick Python Bookを使って、著者がfrozensetsについて話している。タプルは順序付けられたデータ構造であるが、フリーズセット、より一般的にはセットが順序付けられていないという明らかな違い以外に、タプルとフリーズセットの間に他の違いはありますか?
tuples
は不変lists
、frozensets
は不変sets
です。
tuples
は実際にはオブジェクトの順序付けられたコレクションですが、重複およびハッシュ不可オブジェクトを含むことができ、スライス機能を持ちます
frozensets
はインデックス付けされませんが、sets
-O(1)要素検索、およびユニオンやインターセクションなどの機能の機能があります。可変の対応物のように、重複を含めることはできません。
やや直感に反する-このボンモットはどうですか:
sss = frozenset('abc')
sss |= set('efg')
生成されます:
frozenset(['a', 'c', 'b', 'e', 'g', 'f'])
もちろん、これはx = x |と同等です。 y、元のfrozensetを変更しませんが、コードレビューアにとって「不変」という用語のhalf笑を半分にしないでください!
ボラティリティは、frozensetsがインデックス化されていないことを言及しています。私は他の機能を見ていたので、標準のpythonスライスが不可能であることをすぐに認識しませんでした。
a = frozenset((1, 1, 1, 1, 2, 2, 2)) # results in frozenset([1, 2])
print a[0]
エラーが発生します:
TypeError: 'frozenset' object does not support indexing
インデックス化されていないという事実から明らかですが、ここに明示的に追加する価値がありましたが