バージョン 2.3 で 新たに追加 された仕様です。
setsモジュールは、ユニークな要素の順序なしコレクションを構築し、 操作するためのクラスを提供します。 帰属関係のテストやシーケンスから重複を取り除いたり、 積集合・和集合・差集合・対称差集合のような標準的な数学操作などを含みます。
他のコレクションのように、x in set
, len(set)
,
for x in set
をサポートします。
順序なしコレクションは、挿入の順序や要素位置を記録しません。
従って、インデックス・スライス・他のシーケンス的な振舞いをサポートしません。
ほとんどの集合のアプリケーションは、__hash__()を除いて
すべての集合のメソッドを提供するSetクラスを使用します。
ハッシュを要求する高度なアプリケーションについては、
ImmutableSetクラスが__hash__()メソッドを加えているが、
集合の内容を変更するメソッドは省略されます。
SetとImmutableSetは、
何が集合(isinstance(obj, BaseSet)
)であるか決めるのに役立つ
抽象クラスBaseSetから派生します。
集合クラスは辞書を使用して実装されます。
このことから、集合の要素にするには辞書のキーと同様の要件を満たさなけれ
ばなりません。具体的には、要素になるものには __eq__ と
__hash__ が定義されているという条件です。
その結果、集合はリストや辞書のような変更可能な要素を含むことができません。
しかしそれらは、タプルやImmutableSetのインスタンスのような
不変コレクションを含むことができます。
集合の集合の実装中の便宜については、内部集合が自動的に変更不可能な形式に
変換されます。
例えば、Set([Set(['dog'])])
はSet([ImmutableSet(['dog'])])
へ
変換されます。
[iterable]) |
[iterable]) |
ImmutableSetオブジェクトは__hash__()メソッドを備えているので、 集合要素または辞書キーとして使用することができます。 ImmutableSetオブジェクトは要素を加えたり取り除いたりするメソッドを 持っていません。したがって、コンストラクタが呼ばれたとき要素はすべて 知られていなければなりません。