집합 객체¶
이 절에서는 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
의 인스턴스입니다.
다음 형 검사 매크로는 모든 파이썬 객체에 대한 포인터에서 작동합니다. 마찬가지로, 생성자 함수는 모든 이터러블 파이썬 객체에서 작동합니다.
-
PyObject*
PySet_New
(PyObject *iterable)¶ - Return value: New reference.
Return a new
set
containing objects returned by the iterable. The iterable may beNULL
to create a new empty set. Return the new set on success orNULL
on failure. RaiseTypeError
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 beNULL
to create a new empty frozenset. Return the new set on success orNULL
on failure. RaiseTypeError
if iterable is not actually iterable.
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
를 발생시킵니다.
-
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. RaiseKeyError
if the set is empty. Raise aSystemError
if set is not an instance ofset
or its subtype.
-
int
PySet_ClearFreeList
()¶ 자유 목록(free list)을 비웁니다. 해제된 항목의 총수를 반환합니다.
버전 3.3에 추가.