set.md
1> **Источник:** https://python-all.ru/3.12/c-api/set.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# Объекты множеств89В этом разделе описывается публичный API для объектов [`set`](https://python-all.ru/3.12/library/stdtypes.html#set) и [`frozenset`](https://python-all.ru/3.12/library/stdtypes.html#frozenset). Любую функциональность, не перечисленную ниже, лучше использовать через абстрактный протокол объектов (включая [`PyObject_CallMethod()`](https://python-all.ru/3.12/c-api/call.html#c.PyObject_CallMethod), [`PyObject_RichCompareBool()`](https://python-all.ru/3.12/c-api/object.html#c.PyObject_RichCompareBool), [`PyObject_Hash()`](https://python-all.ru/3.12/c-api/object.html#c.PyObject_Hash), [`PyObject_Repr()`](https://python-all.ru/3.12/c-api/object.html#c.PyObject_Repr), [`PyObject_IsTrue()`](https://python-all.ru/3.12/c-api/object.html#c.PyObject_IsTrue), [`PyObject_Print()`](https://python-all.ru/3.12/c-api/object.html#c.PyObject_Print) и [`PyObject_GetIter()`](https://python-all.ru/3.12/c-api/object.html#c.PyObject_GetIter)) или абстрактный числовой протокол (включая [`PyNumber_And()`](https://python-all.ru/3.12/c-api/number.html#c.PyNumber_And), [`PyNumber_Subtract()`](https://python-all.ru/3.12/c-api/number.html#c.PyNumber_Subtract), [`PyNumber_Or()`](https://python-all.ru/3.12/c-api/number.html#c.PyNumber_Or), [`PyNumber_Xor()`](https://python-all.ru/3.12/c-api/number.html#c.PyNumber_Xor), [`PyNumber_InPlaceAnd()`](https://python-all.ru/3.12/c-api/number.html#c.PyNumber_InPlaceAnd), [`PyNumber_InPlaceSubtract()`](https://python-all.ru/3.12/c-api/number.html#c.PyNumber_InPlaceSubtract), [`PyNumber_InPlaceOr()`](https://python-all.ru/3.12/c-api/number.html#c.PyNumber_InPlaceOr) и [`PyNumber_InPlaceXor()`](https://python-all.ru/3.12/c-api/number.html#c.PyNumber_InPlaceXor)).1011#### `type PySetObject`1213Этот подтип [`PyObject`](https://python-all.ru/3.12/c-api/structures.html#c.PyObject) используется для хранения внутренних данных как для объектов [`set`](https://python-all.ru/3.12/library/stdtypes.html#set), так и для [`frozenset`](https://python-all.ru/3.12/library/stdtypes.html#frozenset). Он похож на [`PyDictObject`](https://python-all.ru/3.12/c-api/dict.html#c.PyDictObject): для небольших множеств имеет фиксированный размер (наподобие хранилища кортежей), а для множеств среднего и большого размера указывает на отдельный блок памяти переменного размера (наподобие хранилища списков). Ни одно из полей этой структуры не следует считать публичным, все они могут измениться. Весь доступ должен осуществляться через документированный API, а не через манипуляции значениями в структуре.1415#### `PyTypeObject PySet_Type`1617*Часть [Stable ABI](https://python-all.ru/3.12/c-api/stable.html#stable).*1819Это экземпляр [`PyTypeObject`](https://python-all.ru/3.12/c-api/type.html#c.PyTypeObject), представляющий тип [`set`](https://python-all.ru/3.12/library/stdtypes.html#set) Python.2021#### `PyTypeObject PyFrozenSet_Type`2223*Часть [Stable ABI](https://python-all.ru/3.12/c-api/stable.html#stable).*2425Это экземпляр [`PyTypeObject`](https://python-all.ru/3.12/c-api/type.html#c.PyTypeObject), представляющий тип [`frozenset`](https://python-all.ru/3.12/library/stdtypes.html#frozenset) Python.2627Следующие макросы проверки типа работают с указателями на любой объект Python. Аналогично, функции-конструкторы работают с любым итерируемым объектом Python.2829#### `int PySet_Check(PyObject *p)`3031Возвращает true, если *p* является объектом [`set`](https://python-all.ru/3.12/library/stdtypes.html#set) или экземпляром подтипа. Эта функция всегда завершается успешно.3233#### `int PyFrozenSet_Check(PyObject *p)`3435Возвращает true, если *p* является объектом [`frozenset`](https://python-all.ru/3.12/library/stdtypes.html#frozenset) или экземпляром подтипа. Эта функция всегда завершается успешно.3637#### `int PyAnySet_Check(PyObject *p)`3839Возвращает true, если *p* является объектом [`set`](https://python-all.ru/3.12/library/stdtypes.html#set), объектом [`frozenset`](https://python-all.ru/3.12/library/stdtypes.html#frozenset) или экземпляром подтипа. Эта функция всегда завершается успешно.4041#### `int PySet_CheckExact(PyObject *p)`4243Возвращает true, если *p* является объектом [`set`](https://python-all.ru/3.12/library/stdtypes.html#set), но не экземпляром подтипа. Эта функция всегда завершается успешно.4445Добавлено в версии 3.10.4647#### `int PyAnySet_CheckExact(PyObject *p)`4849Возвращает true, если *p* является объектом [`set`](https://python-all.ru/3.12/library/stdtypes.html#set) или объектом [`frozenset`](https://python-all.ru/3.12/library/stdtypes.html#frozenset), но не экземпляром подтипа. Эта функция всегда завершается успешно.5051#### `int PyFrozenSet_CheckExact(PyObject *p)`5253Возвращает true, если *p* является объектом [`frozenset`](https://python-all.ru/3.12/library/stdtypes.html#frozenset), но не экземпляром подтипа. Эта функция всегда завершается успешно.5455#### `PyObject *PySet_New(PyObject *iterable)`5657*Возвращаемое значение: новая ссылка.*5859*Часть [Stable ABI](https://python-all.ru/3.12/c-api/stable.html#stable).*6061Возвращает новый [`set`](https://python-all.ru/3.12/library/stdtypes.html#set), содержащий объекты, полученные из *iterable*. *iterable* может быть `NULL` для создания нового пустого множества. При успехе возвращает новое множество, при неудаче – `NULL`. Возбуждает [`TypeError`](https://python-all.ru/3.12/library/exceptions.html#TypeError), если *iterable* на самом деле не итерируем. Конструктор также удобен для копирования множества (`c=set(s)`).6263#### `PyObject *PyFrozenSet_New(PyObject *iterable)`6465*Возвращаемое значение: новая ссылка.*6667*Часть [Stable ABI](https://python-all.ru/3.12/c-api/stable.html#stable).*6869Возвращает новый [`frozenset`](https://python-all.ru/3.12/library/stdtypes.html#frozenset), содержащий объекты, полученные из *iterable*. *iterable* может быть `NULL` для создания нового пустого frozenset. При успехе возвращает новое множество, при неудаче – `NULL`. Возбуждает [`TypeError`](https://python-all.ru/3.12/library/exceptions.html#TypeError), если *iterable* на самом деле не итерируем.7071Следующие функции и макросы доступны для экземпляров [`set`](https://python-all.ru/3.12/library/stdtypes.html#set) или [`frozenset`](https://python-all.ru/3.12/library/stdtypes.html#frozenset), или экземпляров их подтипов.7273#### `Py_ssize_t PySet_Size(PyObject *anyset)`7475*Часть [Stable ABI](https://python-all.ru/3.12/c-api/stable.html#stable).*7677Возвращает длину объекта [`set`](https://python-all.ru/3.12/library/stdtypes.html#set) или [`frozenset`](https://python-all.ru/3.12/library/stdtypes.html#frozenset). Эквивалентно `len(anyset)`. Возбуждает [`SystemError`](https://python-all.ru/3.12/library/exceptions.html#SystemError), если *anyset* не является [`set`](https://python-all.ru/3.12/library/stdtypes.html#set), [`frozenset`](https://python-all.ru/3.12/library/stdtypes.html#frozenset) или экземпляром подтипа.7879#### `Py_ssize_t PySet_GET_SIZE(PyObject *anyset)`8081Макроформа [`PySet_Size()`](https://python-all.ru/3.12/c-api/set.html#c.PySet_Size) без проверки ошибок.8283#### `int PySet_Contains(PyObject *anyset, PyObject *key)`8485*Часть [Stable ABI](https://python-all.ru/3.12/c-api/stable.html#stable).*8687Возвращает `1`, если элемент найден, `0`, если не найден, и `-1`, если произошла ошибка. В отличие от метода [`__contains__()`](https://python-all.ru/3.12/reference/datamodel.html#object.__contains__) в Python, эта функция не преобразует автоматически нехэшируемые множества во временные замороженные множества. Возбуждает [`TypeError`](https://python-all.ru/3.12/library/exceptions.html#TypeError), если *ключ* нехэшируем. Возбуждает [`SystemError`](https://python-all.ru/3.12/library/exceptions.html#SystemError), если *любой набор* не является [`set`](https://python-all.ru/3.12/library/stdtypes.html#set), [`frozenset`](https://python-all.ru/3.12/library/stdtypes.html#frozenset) или экземпляром подтипа.8889#### `int PySet_Add(PyObject *set, PyObject *key)`9091*Часть [Stable ABI](https://python-all.ru/3.12/c-api/stable.html#stable).*9293Добавляет *ключ* в экземпляр [`set`](https://python-all.ru/3.12/library/stdtypes.html#set). Также работает с экземплярами [`frozenset`](https://python-all.ru/3.12/library/stdtypes.html#frozenset) (как и [`PyTuple_SetItem()`](https://python-all.ru/3.12/c-api/tuple.html#c.PyTuple_SetItem), может использоваться для заполнения значений новых неизменяемых множеств до того, как они будут открыты другому коду). Возвращает `0` в случае успеха или `-1` при неудаче. Возбуждает [`TypeError`](https://python-all.ru/3.12/library/exceptions.html#TypeError), если *ключ* нехэшируем. Возбуждает [`MemoryError`](https://python-all.ru/3.12/library/exceptions.html#MemoryError), если нет места для роста. Возбуждает [`SystemError`](https://python-all.ru/3.12/library/exceptions.html#SystemError), если *set* не является экземпляром [`set`](https://python-all.ru/3.12/library/stdtypes.html#set) или его подтипа.9495Следующие функции доступны для экземпляров [`set`](https://python-all.ru/3.12/library/stdtypes.html#set) или его подтипов, но не для экземпляров [`frozenset`](https://python-all.ru/3.12/library/stdtypes.html#frozenset) или его подтипов.9697#### `int PySet_Discard(PyObject *set, PyObject *key)`9899*Часть [Stable ABI](https://python-all.ru/3.12/c-api/stable.html#stable).*100101Возвращает `1`, если элемент найден и удалён, `0`, если не найден (действие не выполняется), и `-1`, если произошла ошибка. Не возбуждает [`KeyError`](https://python-all.ru/3.12/library/exceptions.html#KeyError) для отсутствующих ключей. Возбуждает [`TypeError`](https://python-all.ru/3.12/library/exceptions.html#TypeError), если *ключ* нехэшируем. В отличие от метода [`discard()`](https://python-all.ru/3.12/library/stdtypes.html#frozenset.discard) в Python, эта функция не преобразует автоматически нехэшируемые множества во временные замороженные множества. Возбуждает [`SystemError`](https://python-all.ru/3.12/library/exceptions.html#SystemError), если *множество* не является экземпляром [`set`](https://python-all.ru/3.12/library/stdtypes.html#set) или его подтипа.102103#### `PyObject *PySet_Pop(PyObject *set)`104105*Возвращаемое значение: новая ссылка.*106107*Часть [Stable ABI](https://python-all.ru/3.12/c-api/stable.html#stable).*108109Возвращает новую ссылку на произвольный объект в *множестве* и удаляет этот объект из *множества*. Возвращает `NULL` при неудаче. Возбуждает [`KeyError`](https://python-all.ru/3.12/library/exceptions.html#KeyError), если множество пусто. Возбуждает [`SystemError`](https://python-all.ru/3.12/library/exceptions.html#SystemError), если *set* не является экземпляром [`set`](https://python-all.ru/3.12/library/stdtypes.html#set) или его подтипа.110111#### `int PySet_Clear(PyObject *set)`112113*Часть [Stable ABI](https://python-all.ru/3.12/c-api/stable.html#stable).*114115Опустошает существующее множество, удаляя все элементы. Возвращает `0` в случае успеха. Возвращает `-1` и возбуждает [`SystemError`](https://python-all.ru/3.12/library/exceptions.html#SystemError), если *set* не является экземпляром [`set`](https://python-all.ru/3.12/library/stdtypes.html#set) или его подтипа.116