web-dev-qa-db-ja.com

Pythonのタプルとfrozensetsの違い

私はPython 3 The Quick Python Bookを使って、著者がfrozensetsについて話している。タプルは順序付けられたデータ構造であるが、フリーズセット、より一般的にはセットが順序付けられていないという明らかな違い以外に、タプルとフリーズセットの間に他の違いはありますか?

45
legends2k

tuplesは不変listsfrozensetsは不変setsです。

tuplesは実際にはオブジェクトの順序付けられたコレクションですが、重複およびハッシュ不可オブジェクトを含むことができ、スライス機能を持ちます

frozensetsはインデックス付けされませんが、sets-O(1)要素検索、およびユニオンやインターセクションなどの機能の機能があります。可変の対応物のように、重複を含めることはできません。

71
Volatility

やや直感に反する-このボンモットはどうですか:

sss = frozenset('abc')
sss |= set('efg')

生成されます:

frozenset(['a', 'c', 'b', 'e', 'g', 'f'])

もちろん、これはx = x |と同等です。 y、元のfrozensetを変更しませんが、コードレビューアにとって「不変」という用語のhalf笑を半分にしないでください!

11
F1Rumors

ボラティリティは、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

インデックス化されていないという事実から明らかですが、ここに明示的に追加する価値がありましたが

5
Joop