집합 객체

이 절에서는 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.

Return a new set containing objects returned by the iterable. The iterable may be NULL to create a new empty set. Return the new set on success or NULL on failure. Raise TypeError if iterable is not actually iterable. The constructor is also useful for copying a set (c=set(s)).

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

Return a new frozenset containing objects returned by the iterable. The iterable may be NULL to create a new empty frozenset. Return the new set on success or NULL on failure. Raise TypeError if iterable is not actually iterable.

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.

Return a new reference to an arbitrary object in the set, and removes the object from the set. Return NULL on failure. Raise KeyError if the set is empty. Raise a SystemError if set is not an instance of set or its subtype.

int PySet_Clear(PyObject *set)

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

int PySet_ClearFreeList()

자유 목록(free list)을 비웁니다. 해제된 항목의 총수를 반환합니다.

버전 3.3에 추가.