Set オブジェクト¶
このセクションでは 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() を含む) を使って利用できます。
-
type PySetObject¶
この
PyObjectを継承した型は、setとfrozenset両方の内部データを保存するのに用いられます。PyDictObjectと同じように、小さい集合(set)に対しては(タプルのように)固定サイズであり、そうでない集合に対しては(リストと同じように)可変長のメモリブロックを用います。この構造体のどのフィールドも、公開されていると考えるべきではなく、変更される可能性があります。すべてのアクセスは、構造体の中の値を直接操作するのではなく、ドキュメントされた API を用いて行うべきです。
-
PyTypeObject PySet_Type¶
- 次に属します: Stable ABI.
この
PyTypeObjectのインスタンスは、Python のset型を表します。
-
PyTypeObject PyFrozenSet_Type¶
- 次に属します: Stable ABI.
この
PyTypeObjectのインスタンスは、Python のfrozenset型を表します。
以降の型チェックマクロはすべての Python オブジェクトに対するポインタに対して動作します。同様に、コンストラクタはすべてのイテレート可能な Python オブジェクトに対して動作します。
-
int PyAnySet_Check(PyObject *p)¶
p が
setかfrozenset、あるいはそのサブタイプのオブジェクトであれば、true を返します。この関数は常に成功します。
-
int PySet_CheckExact(PyObject *p)¶
p が
setオブジェクトだがサブタイプのインスタンスでない場合に真を返します。この関数は常に成功します。Added in version 3.10.
-
int PyAnySet_CheckExact(PyObject *p)¶
p が
setかfrozensetのどちらかのオブジェクトであるときに true を返します。サブタイプのオブジェクトは含みません。この関数は常に成功します。
-
int PyFrozenSet_CheckExact(PyObject *p)¶
p が
frozensetオブジェクトだがサブタイプのインスタンスでない場合に真を返します。この関数は常に成功します。
-
PyObject *PySet_New(PyObject *iterable)¶
- 戻り値: 新しい参照。 次に属します: Stable ABI. Thread safety: Safe for concurrent use on the same object.
iterable が返すオブジェクトを含む新しい
setを返します。 iterable がNULLのときは、空の set を返します。 成功したら新しい set を、失敗したらNULLを返します。 iterable がイテレート可能でない場合は、TypeErrorを送出します。 このコンストラクタは set をコピーするときにも使えます (c=set(s))。注釈
iterable が
set、frozenset、dict、frozendictの場合、この操作は フリースレッドビルド でアトミックです。
-
PyObject *PyFrozenSet_New(PyObject *iterable)¶
- 戻り値: 新しい参照。 次に属します: Stable ABI. Thread safety: Safe for concurrent use on the same object.
iterable が返すオブジェクトを含む新しい
frozensetを返します。 iterable がNULLのときは、空の frozenset を返します。 成功時には新しい set を、失敗時にはNULLを返します。 iterable がイテレート可能でない場合は、TypeErrorを送出します。注釈
iterable が
set、frozenset、dict、frozendictの場合、この操作は フリースレッドビルド でアトミックです。
以降の関数やマクロは、 set と frozenset とそのサブタイプのインスタンスに対して利用できます。
-
Py_ssize_t PySet_Size(PyObject *anyset)¶
- 次に属します: Stable ABI. Thread safety: Atomic.
setまたはfrozensetオブジェクトの長さを返します。len(anyset)と等価です。 anyset がset、frozenset、またはそのサブタイプのインスタンスでない場合、SystemErrorを送出します。
-
Py_ssize_t PySet_GET_SIZE(PyObject *anyset)¶
- Thread safety: Atomic.
エラーチェックを行わない、
PySet_Size()のマクロ形式。
-
int PySet_Contains(PyObject *anyset, PyObject *key)¶
- 次に属します: Stable ABI. Thread safety: Safe for concurrent use on the same object.
見付かれば
1、見付からなければ0、エラーが起きれば-1を返します。 Python の__contains__()メソッドとは異なり、ハッシュ不可能な集合を一時的な frozenset に自動変換しません。 key がハッシュ不可能な場合、TypeErrorを送出します。 anyset がset、frozenset、またはそのサブタイプのインスタンスでない場合、SystemErrorを送出します。
-
int PySet_Add(PyObject *set, PyObject *key)¶
- 次に属します: Stable ABI. Thread safety: Safe for concurrent use on the same object.
setのインスタンスに key を追加します。frozensetに対しても動作します (PyTuple_SetItem()のように、他のコードに見える前の新しい frozenset の値を埋めるために使用できます)。 成功したら0を、失敗したら-1を返します。 key がハッシュ可能でない場合は、TypeErrorを送出します。 set を大きくする余裕がない場合は、MemoryErrorを送出します。 set がsetかそのサブタイプのインスタンスでない場合は、SystemErrorを送出します。
以降の関数は、 set とそのサブタイプに対して利用可能です。 frozenset とそのサブタイプには利用できません。
-
int PySet_Discard(PyObject *set, PyObject *key)¶
- 次に属します: Stable ABI. Thread safety: Safe for concurrent use on the same object.
見付かって削除した場合は
1、見付からなかった場合は何もせず0、エラーが起きた場合は-1を返します。 キーが存在しなくてもKeyErrorは送出しません。 key がハッシュ不可能な場合はTypeErrorを送出します。 Python のdiscard()メソッドとは異なり、ハッシュ不可能な集合を一時的な frozenset に自動変換しません。 set がsetまたはそのサブタイプのインスタンスでない場合は、SystemErrorを送出します。
-
PyObject *PySet_Pop(PyObject *set)¶
- 戻り値: 新しい参照。 次に属します: Stable ABI. Thread safety: Atomic.
set の中の要素のどれかに対する新しい参照を返し、そのオブジェクトを set から削除します。 失敗したら
NULLを返します。 set が空の場合にはKeyErrorを送出します。 set がsetとそのサブタイプのインスタンスでない場合は、SystemErrorを送出します。
-
int PySet_Clear(PyObject *set)¶
- 次に属します: Stable ABI. Thread safety: Atomic.
既存の集合のすべての要素を取り除いて空にします。 成功すると
0を返します。 set がsetまたはそのサブタイプのインスタンスでない場合、SystemErrorを送出して-1を返します。注釈
フリースレッドビルド では、エントリーをクリアする前に集合を空にするため、他のスレッドからは途中の状態ではなく空の集合が見えます。
非推奨の API¶
-
PySet_MINSIZE¶
PySetObjectインスタンスの内部に事前確保されたテーブルのサイズを表す定数。CPython のどのバージョンでも固定サイズの事前確保テーブルを使うという保証はないため、網羅性のためだけに記載しています。 集合の不安定な内部実装を扱わないコードでは、
PySet_MINSIZEを8のような小さな定数に置き換えられます。集合のサイズを求める場合は、代わりに
PySet_Size()を使ってください。バージョン 3.14 で ソフト非推奨 <Soft deprecated>.