60

私は The Quick Python Book を使用して Python 3 を学んでいます。著者はfrozensets について話し、set は変更可能でハッシュできないため、辞書のキーには適さないため、凍結された対応するものが導入されたと述べています。タプルは順序付けられたデータ構造であり、フローズンセット、またはより一般的にはセットは順序付けられていないという明らかな違い以外に、タプルとフローズンセットの間に他の違いはありますか?

4

4 に答える 4

99

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

tuples確かにオブジェクトの順序付けられたコレクションですが、重複やハッシュ不可能なオブジェクトを含むことができ、スライス機能があります

frozensetsはインデックス化されていませんが、setsO(1) 要素のルックアップ、およびユニオンや交差などの機能があります。また、変更可能な対応物のように、重複を含めることもできません。

于 2013-01-20T07:07:22.753 に答える
13

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

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

生成されます:

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

もちろん、これは x = x | と同等です。y、元のfrozensetを変更するわけではありませんが、コードレビュー担当者にとって「不変」という用語を半分嘲笑することにはなりません!

于 2013-11-20T18:32:01.890 に答える
6

頭に浮かぶ違いの 1 つは、重複の問題です。のタプルは(1, 1, 1, 1, 2, 2, 2)まさにあなたが期待するものですが、frozenset はそれらの重複をすべて削除し、frozenset([1, 2]).

于 2013-01-20T07:06:55.220 に答える
5

Volatility は、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

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

于 2013-05-27T09:01:11.893 に答える