집합 객체¶
이 절에서는 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()을 포함합니다).
-
type PySetObject¶
이
PyObject의 서브 형은set과frozenset객체 모두의 내부 데이터를 담는 데 사용됩니다. 이것은 작은 집합은 고정 크기(튜플 저장과 매우 흡사함)이고, 중형과 대형 집합은 별도의 가변 크기 메모리 블록(리스트 저장소처럼)을 가리킨다는 점에서PyDictObject와 비슷합니다. 이 구조체의 필드는 아무것도 공개되지 않은 것으로 취급되어야 하며, 모두 변경될 수 있습니다. 모든 액세스는 구조체의 값을 조작하기보다는 설명된 API를 통해 수행해야 합니다.
-
PyTypeObject PySet_Type¶
- 상의 안정 ABI.
이것은 파이썬
set형을 나타내는PyTypeObject의 인스턴스입니다.
-
PyTypeObject PyFrozenSet_Type¶
- 상의 안정 ABI.
이것은 파이썬
frozenset형을 나타내는PyTypeObject의 인스턴스입니다.
다음 형 검사 매크로는 모든 파이썬 객체에 대한 포인터에서 작동합니다. 마찬가지로, 생성자 함수는 모든 이터러블 파이썬 객체에서 작동합니다.
-
int PySet_CheckExact(PyObject *p)¶
p가
set객체이지만, 서브 형의 인스턴스는 아니면 참을 반환합니다. 이 함수는 항상 성공합니다.Added in version 3.10.
-
int PyAnySet_CheckExact(PyObject *p)¶
p가
set객체나frozenset객체이지만, 서브 형의 인스턴스는 아니면 참을 반환합니다. 이 함수는 항상 성공합니다.
-
int PyFrozenSet_CheckExact(PyObject *p)¶
p가
frozenset객체이지만, 서브 형의 인스턴스는 아니면 참을 반환합니다. 이 함수는 항상 성공합니다.
-
PyObject *PySet_New(PyObject *iterable)¶
- 반환값: 새 참조. 상의 안정 ABI. Thread safety: Safe for concurrent use on the same object.
iterable에 의해 반환된 객체를 포함하는 새로운
set을 반환합니다. iterable은 새로운 빈 집합을 만들기 위해NULL일 수 있습니다. 성공하면 새 집합을, 실패하면NULL을 반환합니다. iterable이 실제로 이터러블이 아니면TypeError를 발생시킵니다. 생성자는 집합을 복사할 때도 유용합니다 (c=set(s)).참고
연산은 iterable 이
set,frozenset,dict또는frozendict인 경우, 자유 스레딩 에서 원자적입니다.
-
PyObject *PyFrozenSet_New(PyObject *iterable)¶
- 반환값: 새 참조. 상의 안정 ABI. Thread safety: Safe for concurrent use on the same object.
iterable에 의해 반환된 객체를 포함한 새로운
frozenset을 반환합니다. iterable은 새로운 빈 frozenset을 만들기 위해NULL일 수 있습니다. 성공하면 새 집합을, 실패하면NULL을 반환합니다. iterable이 실제로 이터러블이 아니면TypeError를 발생시킵니다.참고
연산은 iterable 이
set,frozenset,dict또는frozendict인 경우, 자유 스레딩 에서 원자적입니다.
set 이나 frozenset의 인스턴스 또는 그들의 서브 형의 인스턴스에 대해 다음 함수와 매크로를 사용할 수 있습니다.
-
Py_ssize_t PySet_Size(PyObject *anyset)¶
- 상의 안정 ABI. Thread safety: Atomic.
set이나frozenset객체의 길이를 반환합니다.len(anyset)와 동등합니다. anyset이set,frozenset또는 서브 형의 인스턴스가 아니면SystemError를 발생시킵니다.
-
Py_ssize_t PySet_GET_SIZE(PyObject *anyset)¶
- Thread safety: Atomic.
에러 검사 없는
PySet_Size()의 매크로 형식.
-
int PySet_Contains(PyObject *anyset, PyObject *key)¶
- 상의 안정 ABI. Thread safety: Safe for concurrent use on the same object.
발견되면
1을, 발견되지 않으면0을, 에러가 발생하면-1을 반환합니다. 파이썬__contains__()메서드와는 달리, 이 함수는 해시 불가능한 집합을 임시 frozenset으로 자동 변환하지 않습니다. key가 해시 불가능하면,TypeError를 발생시킵니다. anyset이set,frozenset또는 서브 형의 인스턴스가 아니면SystemError를 발생시킵니다.
-
int PySet_Add(PyObject *set, PyObject *key)¶
- 상의 안정 ABI. Thread safety: Safe for concurrent use on the same object.
key를
set인스턴스에 추가합니다. 또한frozenset인스턴스에도 작동합니다 (PyTuple_SetItem()처럼 다른 코드에 노출되기 전에 새로운 frozenset의 값을 채우는 데 사용할 수 있습니다). 성공하면0을, 실패하면-1을 반환합니다. key가 해시 불가능하면,TypeError를 발생시킵니다. 성장할 공간이 없다면MemoryError를 발생시킵니다. set이set이나 그 서브 형의 인스턴스가 아니면SystemError를 발생시킵니다.
다음 함수는 set 이나 그것의 서브 형의 인스턴스에는 사용할 수 있지만, frozenset 이나 그 서브 형의 인스턴스에는 사용할 수 없습니다.
-
int PySet_Discard(PyObject *set, PyObject *key)¶
- 상의 안정 ABI. Thread safety: Safe for concurrent use on the same object.
Return
1if found and removed,0if not found (no action taken), and-1if an error is encountered. Does not raiseKeyErrorfor missing keys. Raise aTypeErrorif the key is unhashable. Unlike the Pythondiscard()method, this function does not automatically convert unhashable sets into temporary frozensets. RaiseSystemErrorif set is not an instance ofsetor its subtype.
-
PyObject *PySet_Pop(PyObject *set)¶
- 반환값: 새 참조. 상의 안정 ABI. Thread safety: Atomic.
set에 들어있는 임의의 객체에 대한 새 참조를 반환하고, set에서 객체를 제거합니다. 실패하면
NULL을 반환합니다. 집합이 비어 있으면,KeyError를 발생시킵니다. set이set이나 그 서브 형의 인스턴스가 아니면SystemError를 발생시킵니다.
-
int PySet_Clear(PyObject *set)¶
- 상의 안정 ABI. Thread safety: Atomic.
기존의 모든 요소 집합을 비웁니다. 성공하면
0을 반환합니다. set이set이나 그 서브타입의 인스턴스가 아니면SystemError를 발생시키고-1을 반환합니다.참고
:term:`free-threaded build`에서는 요소를 지우기 전에 집합이 비워지므로, 다른 스레드가 중간 상태가 아닌 빈 집합을 관찰하게 됩니다.
사용 지원 중단된 API입니다.¶
-
PySet_MINSIZE¶
PySetObject인스턴스 내부의 내부 사전 할당 테이블 크기를 나타내는 상수입니다.이 문서는 완전성을 위해만 기록되었습니다. 특정 CPython 버전이 고정 크기의 사전 할당 테이블을 사용한다는 보장은 없기 때문입니다. 불안정한 set 내부를 다루지 않는 코드에서는
PySet_MINSIZE를8과 같은 작은 상수로 대체할 수 있습니다.집합의 크기를 찾으려면 대신 :c:func:`PySet_Size`를 사용하십시오.
버전 3.14부터 약하게 폐지 <Soft deprecated>.