집합 객체¶
이 절에서는 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()
을 포함합니다).
-
PySetObject
¶ 이
PyObject
의 서브 형은set
과frozenset
객체 모두의 내부 데이터를 담는 데 사용됩니다. 이것은 작은 집합은 고정 크기(튜플 저장과 매우 흡사함)이고, 중형과 대형 집합은 별도의 가변 크기 메모리 블록(리스트 저장소처럼)을 가리킨다는 점에서PyDictObject
와 비슷합니다. 이 구조체의 필드는 아무것도 공개되지 않은 것으로 취급되어야 하며, 변경될 수 있습니다. 모든 액세스는 구조체의 값을 조작하기보다는 설명된 API를 통해 수행해야 합니다.
-
PyTypeObject
PySet_Type
¶ 이것은 파이썬
set
형을 나타내는PyTypeObject
의 인스턴스입니다.
-
PyTypeObject
PyFrozenSet_Type
¶ 이것은 파이썬
frozenset
형을 나타내는PyTypeObject
의 인스턴스입니다.
다음 형 검사 매크로는 모든 파이썬 객체에 대한 포인터에서 작동합니다. 마찬가지로, 생성자 함수는 모든 이터러블 파이썬 객체에서 작동합니다.
-
int
PyAnySet_CheckExact
(PyObject *p)¶ p가
set
객체나frozenset
객체이지만, 서브 형의 인스턴스는 아니면 참을 반환합니다. 이 함수는 항상 성공합니다.
-
int
PyFrozenSet_CheckExact
(PyObject *p)¶ p가
frozenset
객체이지만, 서브 형의 인스턴스는 아니면 참을 반환합니다. 이 함수는 항상 성공합니다.
-
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)
와 동등합니다. anyset이set
,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
를 발생시킵니다. anyset이set
,frozenset
또는 서브 형의 인스턴스가 아니면PyExc_SystemError
를 발생시킵니다.
-
int
PySet_Add
(PyObject *set, PyObject *key)¶ key를
set
인스턴스에 추가합니다. 또한frozenset
인스턴스에도 작동합니다 (PyTuple_SetItem()
처럼 다른 코드에 노출되기 전에 새로운 frozenset의 값을 채우는 데 사용할 수 있습니다). 성공하면0
을, 실패하면-1
을 반환합니다. key가 해시 불가능하면,TypeError
를 발생시킵니다. 성장할 공간이 없다면MemoryError
를 발생시킵니다. set이set
이나 그 서브 형의 인스턴스가 아니면SystemError
를 발생시킵니다.
다음 함수는 set
이나 그것의 서브 형의 인스턴스에는 사용할 수 있지만, frozenset
이나 그 서브 형의 인스턴스에는 사용할 수 없습니다.
-
int
PySet_Discard
(PyObject *set, PyObject *key)¶ 발견되고 제거되면
1
을 반환하고, 발견되지 않으면(아무런 일도 하지 않습니다)0
을 반환하고, 에러가 발생하면-1
을 반환합니다. 발견할 수 없는 키에 대해KeyError
를 발생시키지 않습니다. key가 해시 불가능하면TypeError
를 발생시킵니다. 파이썬discard()
메서드와는 달리, 이 함수는 해시 불가능한 집합을 임시 frozenset으로 자동 변환하지 않습니다. set이set
이나 그 서브 형의 인스턴스가 아니면PyExc_SystemError
를 발생시킵니다.