집합 객체

이 절에서는 setfrozenset 객체에 대한 공용 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의 서브 형은 setfrozenset 객체 모두의 내부 데이터를 담는 데 사용됩니다. 이것은 작은 집합은 고정 크기(튜플 저장과 매우 흡사함)이고, 중형과 대형 집합은 별도의 가변 크기 메모리 블록(리스트 저장소처럼)을 가리킨다는 점에서 PyDictObject와 비슷합니다. 이 구조체의 필드는 아무것도 공개되지 않은 것으로 취급되어야 하며, 변경될 수 있습니다. 모든 액세스는 구조체의 값을 조작하기보다는 설명된 API를 통해 수행해야 합니다.

PyTypeObject PySet_Type

이것은 파이썬 set 형을 나타내는 PyTypeObject의 인스턴스입니다.

PyTypeObject PyFrozenSet_Type

이것은 파이썬 frozenset 형을 나타내는 PyTypeObject의 인스턴스입니다.

다음 형 검사 매크로는 모든 파이썬 객체에 대한 포인터에서 작동합니다. 마찬가지로, 생성자 함수는 모든 이터러블 파이썬 객체에서 작동합니다.

int PySet_Check(PyObject *p)

pset 객체나 서브 형의 인스턴스면 참을 반환합니다.

int PyFrozenSet_Check(PyObject *p)

pfrozenset 객체나 서브 형의 인스턴스면 참을 반환합니다.

int PyAnySet_Check(PyObject *p)

pset 객체, frozenset 객체 또는 서브 형의 인스턴스면 참을 반환합니다.

int PyAnySet_CheckExact(PyObject *p)

pset 객체나 frozenset 객체이지만, 서브 형의 인스턴스는 아니면 참을 반환합니다.

int PyFrozenSet_CheckExact(PyObject *p)

pfrozenset 객체이지만, 서브 형의 인스턴스는 아니면 참을 반환합니다.

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

iterable에 의해 반환된 객체를 포함하는 새로운 set을 반환합니다. iterable은 새로운 빈 집합을 만들기 위해 NULL 일 수 있습니다. 성공하면 새 집합을, 실패하면 NULL을 반환합니다. iterable이 실제로 이터러블이 아니면 TypeError를 발생시킵니다. 생성자는 집합을 복사할 때도 유용합니다 (c=set(s)).

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

iterable에 의해 반환된 객체를 포함한 새로운 frozenset을 반환합니다. iterable은 새로운 빈 frozenset을 만들기 위해 NULL 일 수 있습니다. 성공하면 새 집합을, 실패하면 NULL을 반환합니다. iterable이 실제로 이터러블이 아니면 TypeError를 발생시킵니다.

set 이나 frozenset의 인스턴스 또는 그들의 서브 형의 인스턴스에 대해 다음 함수와 매크로를 사용할 수 있습니다.

Py_ssize_t PySet_Size(PyObject *anyset)

set 이나 frozenset 객체의 길이를 반환합니다. len(anyset)와 동등합니다. anysetset, frozenset 또는 서브 형의 인스턴스가 아니면 PyExc_SystemError를 발생시킵니다.

Py_ssize_t PySet_GET_SIZE(PyObject *anyset)

에러 검사 없는 PySet_Size()의 매크로 형식.

int PySet_Contains(PyObject *anyset, PyObject *key)

발견되면 1을, 발견되지 않으면 0을, 에러가 발생하면 -1을 반환합니다. 파이썬 __contains__() 메서드와는 달리, 이 함수는 해시 불가능한 집합을 임시 frozenset으로 자동 변환하지 않습니다. key가 해시 불가능하면, TypeError를 발생시킵니다. anysetset, frozenset 또는 서브 형의 인스턴스가 아니면 PyExc_SystemError를 발생시킵니다.

int PySet_Add(PyObject *set, PyObject *key)

keyset 인스턴스에 추가합니다. 또한 frozenset 인스턴스에도 작동합니다 (PyTuple_SetItem()처럼 다른 코드에 노출되기 전에 새로운 frozenset의 값을 채우는 데 사용할 수 있습니다). 성공하면 0을, 실패하면 -1을 반환합니다. key가 해시 불가능하면, TypeError를 발생시킵니다. 성장할 공간이 없다면 MemoryError를 발생시킵니다. setset 이나 그 서브 형의 인스턴스가 아니면 SystemError를 발생시킵니다.

다음 함수는 set 이나 그것의 서브 형의 인스턴스에는 사용할 수 있지만, frozenset 이나 그 서브 형의 인스턴스에는 사용할 수 없습니다.

int PySet_Discard(PyObject *set, PyObject *key)

발견되고 제거되면 1을 반환하고, 발견되지 않으면(아무런 일도 하지 않습니다) 0을 반환하고, 에러가 발생하면 -1을 반환합니다. 발견할 수 없는 키에 대해 KeyError를 발생시키지 않습니다. key가 해시 불가능하면 TypeError를 발생시킵니다. 파이썬 discard() 메서드와는 달리, 이 함수는 해시 불가능한 집합을 임시 frozenset으로 자동 변환하지 않습니다. setset 이나 그 서브 형의 인스턴스가 아니면 PyExc_SystemError를 발생시킵니다.

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

set에 들어있는 임의의 객체에 대한 새 참조를 반환하고, set에서 객체를 제거합니다. 실패하면 NULL을 반환합니다. 집합이 비어 있으면, KeyError를 발생시킵니다. setset 이나 그 서브 형의 인스턴스가 아니면 SystemError를 발생시킵니다.

int PySet_Clear(PyObject *set)

기존의 모든 요소 집합을 비웁니다.