set.md
1> **Источник:** https://python-all.ru/3.4/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.4/library/stdtypes.html#set) и [`frozenset`](https://python-all.ru/3.4/library/stdtypes.html#frozenset) объектов. Любая функциональность, не перечисленная ниже, лучше всего доступна через абстрактный объектный протокол (включая [`PyObject_CallMethod()`](https://python-all.ru/3.4/c-api/object.html#c.PyObject_CallMethod), [`PyObject_RichCompareBool()`](https://python-all.ru/3.4/c-api/object.html#c.PyObject_RichCompareBool), [`PyObject_Hash()`](https://python-all.ru/3.4/c-api/object.html#c.PyObject_Hash), [`PyObject_Repr()`](https://python-all.ru/3.4/c-api/object.html#c.PyObject_Repr), [`PyObject_IsTrue()`](https://python-all.ru/3.4/c-api/object.html#c.PyObject_IsTrue), [`PyObject_Print()`](https://python-all.ru/3.4/c-api/object.html#c.PyObject_Print) и [`PyObject_GetIter()`](https://python-all.ru/3.4/c-api/object.html#c.PyObject_GetIter)) или абстрактный числовой протокол (включая [`PyNumber_And()`](https://python-all.ru/3.4/c-api/number.html#c.PyNumber_And), [`PyNumber_Subtract()`](https://python-all.ru/3.4/c-api/number.html#c.PyNumber_Subtract), [`PyNumber_Or()`](https://python-all.ru/3.4/c-api/number.html#c.PyNumber_Or), [`PyNumber_Xor()`](https://python-all.ru/3.4/c-api/number.html#c.PyNumber_Xor), [`PyNumber_InPlaceAnd()`](https://python-all.ru/3.4/c-api/number.html#c.PyNumber_InPlaceAnd), [`PyNumber_InPlaceSubtract()`](https://python-all.ru/3.4/c-api/number.html#c.PyNumber_InPlaceSubtract), [`PyNumber_InPlaceOr()`](https://python-all.ru/3.4/c-api/number.html#c.PyNumber_InPlaceOr) и [`PyNumber_InPlaceXor()`](https://python-all.ru/3.4/c-api/number.html#c.PyNumber_InPlaceXor)).1011**`PySetObject`**1213Этот подтип [`PyObject`](https://python-all.ru/3.4/c-api/structures.html#c.PyObject) используется для хранения внутренних данных как для объектов [`set`](https://python-all.ru/3.4/library/stdtypes.html#set), так и для [`frozenset`](https://python-all.ru/3.4/library/stdtypes.html#frozenset). Он подобен [`PyDictObject`](https://python-all.ru/3.4/c-api/dict.html#c.PyDictObject) в том, что имеет фиксированный размер для небольших множеств (как хранение кортежей) и будет указывать на отдельный блок памяти переменного размера для средних и больших множеств (как хранение списков). Ни одно из полей этой структуры не должно считаться публичным и может быть изменено. Весь доступ должен осуществляться через документированный API, а не путём манипулирования значениями в структуре.1415**[PyTypeObject](https://python-all.ru/3.4/c-api/type.html#c.PyTypeObject) `PySet_Type`**1617Это экземпляр [`PyTypeObject`](https://python-all.ru/3.4/c-api/type.html#c.PyTypeObject), представляющий тип [`set`](https://python-all.ru/3.4/library/stdtypes.html#set) языка Python.1819**[PyTypeObject](https://python-all.ru/3.4/c-api/type.html#c.PyTypeObject) `PyFrozenSet_Type`**2021Это экземпляр [`PyTypeObject`](https://python-all.ru/3.4/c-api/type.html#c.PyTypeObject), представляющий тип [`frozenset`](https://python-all.ru/3.4/library/stdtypes.html#frozenset) языка Python.2223Следующие макросы проверки типа работают с указателями на любой объект Python. Аналогично, функции-конструкторы работают с любым итерируемым объектом Python.2425#### `int PySet_Check(PyObject *p)`2627Возвращает true, если *p* является объектом [`set`](https://python-all.ru/3.4/library/stdtypes.html#set) или экземпляром подтипа.2829#### `int PyFrozenSet_Check(PyObject *p)`3031Возвращает true, если *p* является объектом [`frozenset`](https://python-all.ru/3.4/library/stdtypes.html#frozenset) или экземпляром подтипа.3233#### `int PyAnySet_Check(PyObject *p)`3435Возвращает true, если *p* является объектом [`set`](https://python-all.ru/3.4/library/stdtypes.html#set), объектом [`frozenset`](https://python-all.ru/3.4/library/stdtypes.html#frozenset) или экземпляром подтипа.3637#### `int PyAnySet_CheckExact(PyObject *p)`3839Возвращает true, если *p* является объектом [`set`](https://python-all.ru/3.4/library/stdtypes.html#set) или объектом [`frozenset`](https://python-all.ru/3.4/library/stdtypes.html#frozenset), но не экземпляром подтипа.4041#### `int PyFrozenSet_CheckExact(PyObject *p)`4243Возвращает true, если *p* является объектом [`frozenset`](https://python-all.ru/3.4/library/stdtypes.html#frozenset), но не экземпляром подтипа.4445#### `PyObject* PySet_New(PyObject *iterable)`4647*Возвращаемое значение: новая ссылка.*4849Возвращает новый [`set`](https://python-all.ru/3.4/library/stdtypes.html#set), содержащий объекты, возвращаемые *iterable*. Значение *iterable* может быть *NULL* для создания нового пустого set. Возвращает новый set при успехе или *NULL* при неудаче. Вызывает [`TypeError`](https://python-all.ru/3.4/library/exceptions.html#TypeError), если *iterable* на самом деле не является итерируемым. Конструктор также полезен для копирования set (`c=set(s)`).5051#### `PyObject* PyFrozenSet_New(PyObject *iterable)`5253*Возвращаемое значение: новая ссылка.*5455Возвращает новый [`frozenset`](https://python-all.ru/3.4/library/stdtypes.html#frozenset), содержащий объекты, возвращаемые *iterable*. Значение *iterable* может быть *NULL* для создания нового пустого frozenset. Возвращает новый frozenset при успехе или *NULL* при неудаче. Вызывает [`TypeError`](https://python-all.ru/3.4/library/exceptions.html#TypeError), если *iterable* на самом деле не является итерируемым.5657Следующие функции и макросы доступны для экземпляров [`set`](https://python-all.ru/3.4/library/stdtypes.html#set) или [`frozenset`](https://python-all.ru/3.4/library/stdtypes.html#frozenset), а также для экземпляров их подтипов.5859#### `Py_ssize_t PySet_Size(PyObject *anyset)`6061Возвращает длину объекта [`set`](https://python-all.ru/3.4/library/stdtypes.html#set) или [`frozenset`](https://python-all.ru/3.4/library/stdtypes.html#frozenset). Эквивалентно `len(anyset)`. Вызывает `PyExc_SystemError`, если *anyset* не является [`set`](https://python-all.ru/3.4/library/stdtypes.html#set), [`frozenset`](https://python-all.ru/3.4/library/stdtypes.html#frozenset) или экземпляром подтипа.6263#### `Py_ssize_t PySet_GET_SIZE(PyObject *anyset)`6465Макроформа [`PySet_Size()`](https://python-all.ru/3.4/c-api/set.html#c.PySet_Size) без проверки ошибок.6667#### `int PySet_Contains(PyObject *anyset, PyObject *key)`6869Возвращает 1, если найдено, 0, если не найдено, и -1, если возникла ошибка. В отличие от метода Python [`__contains__()`](https://python-all.ru/3.4/reference/datamodel.html#object.__contains__), эта функция не преобразует автоматически нехешируемые множества во временные frozenset. Вызывает [`TypeError`](https://python-all.ru/3.4/library/exceptions.html#TypeError), если *key* нехешируем. Вызывает `PyExc_SystemError`, если *anyset* не является [`set`](https://python-all.ru/3.4/library/stdtypes.html#set), [`frozenset`](https://python-all.ru/3.4/library/stdtypes.html#frozenset) или экземпляром подтипа.7071#### `int PySet_Add(PyObject *set, PyObject *key)`7273Добавляет *key* в экземпляр [`set`](https://python-all.ru/3.4/library/stdtypes.html#set). Также работает с экземплярами [`frozenset`](https://python-all.ru/3.4/library/stdtypes.html#frozenset) (подобно [`PyTuple_SetItem()`](https://python-all.ru/3.4/c-api/tuple.html#c.PyTuple_SetItem), её можно использовать для заполнения значений совершенно новых frozenset до того, как они будут открыты другому коду). Возвращает 0 при успехе или -1 при неудаче. Вызывает [`TypeError`](https://python-all.ru/3.4/library/exceptions.html#TypeError), если *key* нехешируем. Вызывает [`MemoryError`](https://python-all.ru/3.4/library/exceptions.html#MemoryError), если нет места для роста. Вызывает [`SystemError`](https://python-all.ru/3.4/library/exceptions.html#SystemError), если *set* не является экземпляром [`set`](https://python-all.ru/3.4/library/stdtypes.html#set) или его подтипа.7475Следующие функции доступны для экземпляров [`set`](https://python-all.ru/3.4/library/stdtypes.html#set) или его подтипов, но не для экземпляров [`frozenset`](https://python-all.ru/3.4/library/stdtypes.html#frozenset) или его подтипов.7677#### `int PySet_Discard(PyObject *set, PyObject *key)`7879Возвращает 1, если элемент найден и удалён, 0 – если не найден (действие не выполняется), и -1, если произошла ошибка. Не вызывает [`KeyError`](https://python-all.ru/3.4/library/exceptions.html#KeyError) для отсутствующих ключей. Вызывает [`TypeError`](https://python-all.ru/3.4/library/exceptions.html#TypeError), если *ключ* нехешируемый. В отличие от метода Python [`discard()`](https://python-all.ru/3.4/library/stdtypes.html#set.discard), эта функция не преобразует автоматически нехешируемые множества во временные frozenset. Вызывает `PyExc_SystemError`, если *множество* не является экземпляром [`set`](https://python-all.ru/3.4/library/stdtypes.html#set) или его подтипа.8081#### `PyObject* PySet_Pop(PyObject *set)`8283*Возвращаемое значение: новая ссылка.*8485Возвращает новую ссылку на произвольный объект из *множества* и удаляет объект из *множества*. В случае ошибки возвращает *NULL*. Вызывает [`KeyError`](https://python-all.ru/3.4/library/exceptions.html#KeyError), если множество пусто. Вызывает [`SystemError`](https://python-all.ru/3.4/library/exceptions.html#SystemError), если *множество* не является экземпляром [`set`](https://python-all.ru/3.4/library/stdtypes.html#set) или его подтипа.8687#### `int PySet_Clear(PyObject *set)`8889Очищает существующее множество от всех элементов.9091#### `int PySet_ClearFreeList()`9293Очищает список свободных элементов. Возвращает общее количество освобождённых элементов.9495Новое в версии 3.3.96