Объекты множеств
В этом разделе подробно описан общедоступный API для объектов set и frozenset. Для доступа к функциональности, не перечисленной ниже, лучше всего использовать абстрактный протокол объектов (включая 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.
Это экземпляр
PyTypeObject, представляющий тип Pythonset.
-
PyTypeObject PyFrozenSet_Type -
Часть стабильного ABI.
Это экземпляр
PyTypeObject, представляющий тип Pythonfrozenset.
Следующие макросы проверки типа работают с указателями на любой объект Python. Аналогично, функции-конструкторы работают с любым итерируемым объектом Python.
-
int PySet_Check(PyObject *p) -
Возвращает true, если p является объектом
setили экземпляром его подтипа. Эта функция всегда завершается успешно.
-
int PyFrozenSet_Check(PyObject *p) -
Возвращает true, если p является объектом
frozensetили экземпляром его подтипа. Эта функция всегда завершается успешно.
-
int PyAnySet_Check(PyObject *p) -
Возвращает true, если p является объектом
set, объектомfrozensetили экземпляром подтипа одного из них. Эта функция всегда завершается успешно.
-
int PySet_CheckExact(PyObject *p) -
Возвращает true, если p является объектом
set, но не экземпляром его подтипа. Эта функция всегда завершается успешно.Добавлено в версии 3.10.
-
int PyAnySet_CheckExact(PyObject *p) -
Возвращает true, если p является объектом
setили объектомfrozenset, но не экземпляром подтипа ни одного из них. Эта функция всегда завершается успешно.
-
int PyFrozenSet_CheckExact(PyObject *p) -
Возвращает true, если p является объектом
frozenset, но не экземпляром его подтипа. Эта функция всегда завершается успешно.
-
PyObject *PySet_New(PyObject *iterable) -
Возвращаемое значение: новая ссылка.Часть стабильного ABI.
Возвращает новое
set, содержащее объекты, возвращённые iterable. Для создания нового пустого множества в качестве iterable можно указатьNULL. В случае успеха возвращает новое множество, а в случае ошибки —NULL. Если iterable на самом деле не является итерируемым объектом, вызывает исключениеTypeError. Конструктор также удобно использовать для копирования множества (c=set(s)).
-
PyObject *PyFrozenSet_New(PyObject *iterable) -
Возвращаемое значение: новая ссылка.Часть стабильного ABI.
Возвращает новый
frozenset, содержащий объекты, возвращённые iterable. Для создания нового пустого неизменяемого множества в качестве iterable можно указатьNULL. В случае успеха возвращает новое множество, а в случае ошибки —NULL. Если iterable на самом деле не является итерируемым объектом, вызывает исключениеTypeError.
Следующие функции и макросы доступны для экземпляров set и frozenset, а также для экземпляров их подтипов.
-
Py_ssize_t PySet_Size(PyObject *anyset) -
Часть стабильного ABI.
Возвращает длину объекта
setилиfrozenset. Эквивалентноlen(anyset). Если anyset не является объектомset,frozensetили экземпляром их подтипа, вызывает исключениеSystemError.
-
Py_ssize_t PySet_GET_SIZE(PyObject *anyset) -
Форма макроса для
PySet_Size()без проверки ошибок.
-
int PySet_Contains(PyObject *anyset, PyObject *key) -
Часть стабильного ABI.
Возвращает
1, если элемент найден,0, если не найден, и-1, если произошла ошибка. В отличие от метода Python__contains__(), эта функция не преобразует автоматически нехешируемые множества во временные неизменяемые множества. Если key не хешируется, вызывает исключениеTypeError. Если anyset не является объектомset,frozensetили экземпляром их подтипа, вызывает исключениеSystemError.
-
int PySet_Add(PyObject *set, PyObject *key) -
Часть стабильного ABI.
Добавляет key в экземпляр
set. Работает также с экземплярамиfrozenset(подобноPyTuple_SetItem(), функцию можно использовать для заполнения значений нового неизменяемого множества до того, как оно станет доступно другому коду). В случае успеха возвращает0, а в случае ошибки —-1. Если key не хешируется, вызывает исключениеTypeError. Если для увеличения размера недостаточно места, вызывает исключениеMemoryError. Если set не является экземпляромsetили его подтипа, вызывает исключениеSystemError.
Следующие функции доступны для экземпляров set и их подтипов, но не для экземпляров frozenset и их подтипов.
-
int PySet_Discard(PyObject *set, PyObject *key) -
Часть стабильного ABI.
Возвращает
1, если элемент найден и удалён,0, если элемент не найден (действий не выполнено), и-1, если произошла ошибка. Не вызывает исключениеKeyErrorдля отсутствующих ключей. Если key не хешируется, вызывает исключениеTypeError. В отличие от метода Pythondiscard(), эта функция не преобразует автоматически нехешируемые множества во временные неизменяемые множества. Если set не является экземпляромsetили его подтипа, вызывает исключениеSystemError.
-
PyObject *PySet_Pop(PyObject *set) -
Возвращаемое значение: новая ссылка.Часть стабильного ABI.
Возвращает новую ссылку на произвольный объект из set и удаляет этот объект из set. В случае ошибки возвращает
NULL. Если множество пусто, вызывает исключениеKeyError. Если set не является экземпляромsetили его подтипа, вызывает исключениеSystemError.
-
int PySet_Clear(PyObject *set) -
Часть стабильного ABI.
Удаляет все элементы из существующего множества. В случае успеха возвращает
0. Если set не является экземпляромsetили его подтипа, возвращает-1и вызывает исключениеSystemError.
© 2001–2025 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.13/c-api/set.html