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

This section details the public API for "set" and "frozenset" objects.
Any functionality not listed below is best accessed using either the
abstract object protocol (including "PyObject_CallMethod()",
"PyObject_RichCompareBool()", "PyObject_Hash()", "PyObject_Repr()",
"PyObject_IsTrue()", "PyObject_Print()", and "PyObject_GetIter()") or
the abstract number protocol (including "PyNumber_And()",
"PyNumber_Subtract()", "PyNumber_Or()", "PyNumber_Xor()",
"PyNumber_InPlaceAnd()", "PyNumber_InPlaceSubtract()",
"PyNumber_InPlaceOr()", and "PyNumber_InPlaceXor()").

PySetObject

   This subtype of "PyObject" is used to hold the internal data for
   both "set" and "frozenset" objects.  It is like a "PyDictObject" in
   that it is a fixed size for small sets (much like tuple storage)
   and will point to a separate, variable sized block of memory for
   medium and large sized sets (much like list storage). None of the
   fields of this structure should be considered public and all are
   subject to change.  All access should be done through the
   documented API rather than by manipulating the values in the
   structure.

PyTypeObject PySet_Type

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

PyTypeObject PyFrozenSet_Type

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

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

int PySet_Check(PyObject *p)

   *p* が "set" かそのサブタイプのオブジェクトであるときに true を返し
   ます。この関数は常に成功します。

int PyFrozenSet_Check(PyObject *p)

   *p* が "frozenset" かそのサブタイプのオブジェクトであるときに true
   を返します。この関数は常に成功します。

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" オブジェクトだがサブタイプのインスタンスでない場
   合に真を返します。この関数は常に成功します。

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" を送出します。

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

Py_ssize_t PySet_Size(PyObject *anyset)

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

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)

   Add *key* to a "set" instance.  Also works with "frozenset"
   instances (like "PyTuple_SetItem()" it can be used to fill in the
   values of brand new frozensets before they are exposed to other
   code).  Return "0" on success or "-1" on failure. Raise a
   "TypeError" if the *key* is unhashable. Raise a "MemoryError" if
   there is no room to grow.  Raise a "SystemError" if *set* is not an
   instance of "set" or its subtype.

以降の関数は、 "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 を空にします。
