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()).


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)

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

int PyFrozenSet_Check(PyObject *p)

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

int PyAnySet_Check(PyObject *p)

psetfrozenset 、あるいはそのサブタイプのオブジェクトであれば、true を返します。この関数は常に成功します。

int PyAnySet_CheckExact(PyObject *p)

psetfrozenset のどちらかのオブジェクトであるときに true を返します。サブタイプのオブジェクトは含みません。この関数は常に成功します。

int PyFrozenSet_CheckExact(PyObject *p)

pfrozenset オブジェクトだがサブタイプのインスタンスでない場合に真を返します。この関数は常に成功します。

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

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

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

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

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

Py_ssize_t PySet_Size(PyObject *anyset)

setfrozenset のオブジェクトの長さを返します。 len(anyset) と同じです。 anysetsetfrozenset およびそのサブタイプのオブジェクトでない場合は、 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 を送出します。 anysetset, 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 に変換しません。 setset かそのサブタイプのインスタンスでないときは、 PyExc_SystemError を送出します。

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

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

int PySet_Clear(PyObject *set)

set を空にします。