Set オブジェクト
****************

バージョン 2.5 で追加.

このセクションでは "set" と "frozenset" の公開 API について詳しく述べ
ます。以降で説明していない機能は、抽象オブジェクトプロトコル
("PyObject_CallMethod()", "PyObject_RichCompareBool()",
"PyObject_Hash()", "PyObject_Repr()", "PyObject_IsTrue()",
"PyObject_Print()", "PyObject_GetIter()" を含む) か抽象数値プロトコル
("PyNumber_And()", "PyNumber_Subtract()", "PyNumber_Or()",
"PyNumber_Xor()", "PyNumber_InPlaceAnd()",
"PyNumber_InPlaceSubtract()", "PyNumber_InPlaceOr()",
"PyNumber_InPlaceXor()" を含む) を使って利用できます。

PySetObject

   この "PyObject" を継承した型は、 "set" と "frozenset" 両方の内部デ
   ータを保存するのに用いられます。 "PyDictObject" と同じように、小さ
   い集合(set)に対しては(タプルのように)固定サイズであり、そうでない集
   合に対しては(リストと同じように)可変長のメモリブロックを用います。
   この構造体のどのフィールドも、非公開で変更される可能性があると考え
   て下さい。すべてのアクセスは、構造体の中の値を直接操作するのではな
   く、ドキュメントされた API を用いて行うべきです。

PyTypeObject PySet_Type

   この "PyTypeObject" のインスタンスは、Python の "set" 型を表します
   。

PyTypeObject PyFrozenSet_Type

   この "PyTypeObject" のインスタンスは、Python の "frozenset" 型を表
   します。

以降の型チェックマクロはすべての Python オブジェクトに対するポインタに
対して動作します。同様に、コンストラクタはすべてのイテレート可能な
Python オブジェクトに対して動作します。

int PySet_Check(PyObject *p)

   *p* が "set" かそのサブタイプのオブジェクトであるときに真を返します
   。

   バージョン 2.6 で追加.

int PyFrozenSet_Check(PyObject *p)

   *p* が "frozenset" かそのサブタイプのオブジェクトであるときに真を返
   します。

   バージョン 2.6 で追加.

int PyAnySet_Check(PyObject *p)

   *p* が "set" か "frozenset" 、あるいはそのサブタイプのオブジェクト
   であれば、true を返します。

int PyAnySet_CheckExact(PyObject *p)

   *p* が "set" か "frozenset" のどちらかのオブジェクトであるときに
   true を返します。サブタイプのオブジェクトは含みません。

int PyFrozenSet_CheckExact(PyObject *p)

   *p* が "frozenset" のオブジェクトであるときに true を返します。サブ
   タイプのオブジェクトは含みません。

PyObject* PySet_New(PyObject *iterable)
    *Return value: New reference.*

   *iterable* が返すオブジェクトを含む新しい "set" を返します。
   *iterable* が *NULL* のときは、空の set を返します。成功したら新し
   い set を、失敗したら *NULL* を返します。 *iterable* がイテレート可
   能で無い場合は、 "TypeError" を送出します。このコンストラクタは set
   をコピーするときにも使えます ("c=set(s)")。

PyObject* PyFrozenSet_New(PyObject *iterable)
    *Return value: New reference.*

   *iterable* が返すオブジェクトを含む新しい "frozenset" を返します。
   *iterable* が *NULL* のときは、空の frozenset を返します。成功時に
   は新しい set を、失敗時には *NULL* を返します。 *iterable* がイテレ
   ート可能で無い場合は、 "TypeError" を送出します。

   バージョン 2.6 で変更: 完全に新しい "frozenset" オブジェクトを返す
   ことが保証されるようになりました。以前は、大きさがゼロの frozenset
   はシングルトンでした。これによりまっさらな frozenset から
   "PySet_Add()" を使って組み立てることが出来ます。

以降の関数やマクロは、 "set" と "frozenset" とそのサブタイプのインスタ
ンスに対して利用できます。

Py_ssize_t PySet_Size(PyObject *anyset)

   "set" や "frozenset" のオブジェクトの長さを返します。 "len(anyset)"
   と同じです。 *anyset* が "set" 、 "frozenset" 及びそのサブタイプの
   オブジェクトで無い場合は、 "PyExc_SystemError" を送出します。

   バージョン 2.5 で変更: この関数は以前は "int" を返していました。こ
   の変更により、 64 bit システムを正しくサポートするには修正が必要に
   なります。

Py_ssize_t PySet_GET_SIZE(PyObject *anyset)

   エラーチェックを行わない、 "PySet_Size()" のマクロ形式。

int PySet_Contains(PyObject *anyset, PyObject *key)

   見つかったら "1" を、見つからなかったら "0" を、エラーが発生した場
   合は "-1" を返します。 Python の "__contains__()" メソッドと違って
   、この関数は非ハッシュ set を一時的な frozenset に自動で変換しませ
   ん。 *key* がハッシュ可能で無い場合、 "TypeError" を送出します。
   *anyset* が "set", "frozenset" 及びそのサブタイプのオブジェクトで無
   い場合は "PyExc_SystemError" を送出します。

int PySet_Add(PyObject *set, PyObject *key)

   "set" のインスタンスに *key* を追加します。 "frozenset" のインスタ
   ンスに使わないで下さい。成功したら "0" を、失敗したら "-1" を返しま
   す。 *key* がハッシュ可能でないなら、 "TypeError" を送出します。
   set を大きくする余裕が無い場合は、 "MemoryError" を送出します。
   *set* が "set" とそのサブタイプのインスタンスで無い場合は、
   "SystemError" を送出します。

   バージョン 2.6 で変更: "frozenset" やそのサブタイプのインスタンスに
   対して利用できるようになりました。 "PyTuple_SetItem()" のように、新
   しい frozenset を他のコードに渡すまえに内容を追加するためのに使うこ
   とができます。

以降の関数は、 "set" とそのサブタイプに対して利用可能です。
"frozenset" とそのサブタイプには利用できません。

int PySet_Discard(PyObject *set, PyObject *key)

   *key* が見つかって、値を削除したら "1" を返します。 見つからなかっ
   たら (何もせずに) "0" を返します。 エラーが発生した場合は "-1" を返
   します。 *key* が無くても "KeyError" を送出しません。 *key* がハッ
   シュ可能でない場合は "TypeError" を送出します。 Python の
   "discard()" メソッドと違って、この関数は非ハッシュ set を一時的な
   frozenset に変換しません。 *set* が "set" かそのサブタイプのインス
   タンスでないときは、 "PyExc_SystemError" を送出します。

PyObject* PySet_Pop(PyObject *set)
    *Return value: New reference.*

   *set* の中の要素のどれかに対する新しい参照を返し、そのオブジェクト
   を *set* から削除します。失敗したら *NULL* を返します。 set が空の
   場合には "KeyError" を送出します。 *set* が "set" とそのサブタイプ
   のインスタンスでない場合は、 "SystemError" を送出します。

int PySet_Clear(PyObject *set)

   set を空にします。
