集合オブジェクト (Set Objects) — Python 2.7ja1 documentation

### ナビゲーション

- 索引
- モジュール |
- 次へ |
- 前へ |
- Python 2.7ja1 documentation »
- Python/C API リファレンスマニュアル »
- 具象オブジェクト (concrete object) レイヤ »

# 集合オブジェクト (Set Objects)

バージョン 2.5 で追加.

このセクションでは `set` と `frozenset` の公開 API について詳しく述べます。以降で説明していない機能は、抽象オブジェクトプロトコル ( `PyObject_CallMethod()`, `PyObject_RichCompareBool()`, `PyObject_Hash()`, `PyObject_Repr()`, `PyObject_IsTrue()`, `PyObject_Print()`, `PyObject_GetIter()` を含む) か抽象数値プロトコル ( `PyNumber_Add()`, `PyNumber_Subtract()`, `PyNumber_Or()`, `PyNumber_Xor()`, `PyNumber_InPlaceAdd()`, `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 を返します。 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` を返していました。 この変更により、 64bit システムを正しくサポートするには修正が必要になります。

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)

  見つかって削除したら 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 を空にします。

### ナビゲーション

- 索引
- モジュール |
- 次へ |
- 前へ |
- Python 2.7ja1 documentation »
- Python/C API リファレンスマニュアル »
- 具象オブジェクト (concrete object) レイヤ »