set.md
1> **Источник:** https://python-all.ru/3.1/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.1/library/stdtypes.html#set) и [`frozenset`](https://python-all.ru/3.1/library/stdtypes.html#frozenset) объектов. Любая функциональность, не перечисленная ниже, лучше всего доступна через абстрактный объектный протокол (включая [`PyObject_CallMethod()`](https://python-all.ru/3.1/c-api/object.html#PyObject_CallMethod), [`PyObject_RichCompareBool()`](https://python-all.ru/3.1/c-api/object.html#PyObject_RichCompareBool), [`PyObject_Hash()`](https://python-all.ru/3.1/c-api/object.html#PyObject_Hash), [`PyObject_Repr()`](https://python-all.ru/3.1/c-api/object.html#PyObject_Repr), [`PyObject_IsTrue()`](https://python-all.ru/3.1/c-api/object.html#PyObject_IsTrue), [`PyObject_Print()`](https://python-all.ru/3.1/c-api/object.html#PyObject_Print) и [`PyObject_GetIter()`](https://python-all.ru/3.1/c-api/object.html#PyObject_GetIter)) или абстрактный числовой протокол (включая [`PyNumber_And()`](https://python-all.ru/3.1/c-api/number.html#PyNumber_And), [`PyNumber_Subtract()`](https://python-all.ru/3.1/c-api/number.html#PyNumber_Subtract), [`PyNumber_Or()`](https://python-all.ru/3.1/c-api/number.html#PyNumber_Or), [`PyNumber_Xor()`](https://python-all.ru/3.1/c-api/number.html#PyNumber_Xor), [`PyNumber_InPlaceAnd()`](https://python-all.ru/3.1/c-api/number.html#PyNumber_InPlaceAnd), [`PyNumber_InPlaceSubtract()`](https://python-all.ru/3.1/c-api/number.html#PyNumber_InPlaceSubtract), [`PyNumber_InPlaceOr()`](https://python-all.ru/3.1/c-api/number.html#PyNumber_InPlaceOr) и [`PyNumber_InPlaceXor()`](https://python-all.ru/3.1/c-api/number.html#PyNumber_InPlaceXor)).1011**`PySetObject`**1213Этот подтип1415[`PyObject`](https://python-all.ru/3.1/c-api/structures.html#PyObject)1617используется для хранения внутренних данных как для объектов1819[`set`](https://python-all.ru/3.1/library/stdtypes.html#set)2021, так и для2223[`frozenset`](https://python-all.ru/3.1/library/stdtypes.html#frozenset)2425. Он подобен2627[`PyDictObject`](https://python-all.ru/3.1/c-api/dict.html#PyDictObject)2829в том, что имеет фиксированный размер для небольших множеств (как хранение кортежей) и будет указывать на отдельный блок памяти переменного размера для средних и больших множеств (как хранение списков). Ни одно из полей этой структуры не должно считаться публичным и может быть изменено. Весь доступ должен осуществляться через документированный API, а не путём манипулирования значениями в структуре.3031**[PyTypeObject](https://python-all.ru/3.1/c-api/type.html#PyTypeObject) `PySet_Type`**3233Это экземпляр3435[`PyTypeObject`](https://python-all.ru/3.1/c-api/type.html#PyTypeObject)3637, представляющий тип3839[`set`](https://python-all.ru/3.1/library/stdtypes.html#set)4041языка Python.4243**[PyTypeObject](https://python-all.ru/3.1/c-api/type.html#PyTypeObject) `PyFrozenSet_Type`**4445Это экземпляр4647[`PyTypeObject`](https://python-all.ru/3.1/c-api/type.html#PyTypeObject)4849, представляющий тип5051[`frozenset`](https://python-all.ru/3.1/library/stdtypes.html#frozenset)5253языка Python.5455Следующие макросы проверки типа работают с указателями на любой объект Python. Аналогично, функции-конструкторы работают с любым итерируемым объектом Python.5657**int `PySet_Check`([PyObject](https://python-all.ru/3.1/c-api/structures.html#PyObject) *\*p*)**5859Возвращает true, если6061*p*6263является объектом6465[`set`](https://python-all.ru/3.1/library/stdtypes.html#set)6667или экземпляром подтипа.6869**int `PyFrozenSet_Check`([PyObject](https://python-all.ru/3.1/c-api/structures.html#PyObject) *\*p*)**7071Возвращает true, если7273*p*7475является объектом7677[`frozenset`](https://python-all.ru/3.1/library/stdtypes.html#frozenset)7879или экземпляром подтипа.8081**int `PyAnySet_Check`([PyObject](https://python-all.ru/3.1/c-api/structures.html#PyObject) *\*p*)**8283Возвращает true, если8485*p*8687является объектом8889[`set`](https://python-all.ru/3.1/library/stdtypes.html#set)9091, объектом9293[`frozenset`](https://python-all.ru/3.1/library/stdtypes.html#frozenset)9495или экземпляром подтипа.9697**int `PyAnySet_CheckExact`([PyObject](https://python-all.ru/3.1/c-api/structures.html#PyObject) *\*p*)**9899Возвращает true, если100101*p*102103является объектом104105[`set`](https://python-all.ru/3.1/library/stdtypes.html#set)106107или объектом108109[`frozenset`](https://python-all.ru/3.1/library/stdtypes.html#frozenset)110111, но не экземпляром подтипа.112113**int `PyFrozenSet_CheckExact`([PyObject](https://python-all.ru/3.1/c-api/structures.html#PyObject) *\*p*)**114115Возвращает true, если116117*p*118119является объектом120121[`frozenset`](https://python-all.ru/3.1/library/stdtypes.html#frozenset)122123, но не экземпляром подтипа.124125**[PyObject](https://python-all.ru/3.1/c-api/structures.html#PyObject)\* `PySet_New`([PyObject](https://python-all.ru/3.1/c-api/structures.html#PyObject) *\*iterable*)**126127*Возвращаемое значение: новая ссылка.*128129Возвращает новый [`set`](https://python-all.ru/3.1/library/stdtypes.html#set), содержащий объекты, возвращаемые *iterable*. Значение *iterable* может быть *NULL* для создания нового пустого set. Возвращает новый set при успехе или *NULL* при неудаче. Вызывает [`TypeError`](https://python-all.ru/3.1/library/exceptions.html#TypeError), если *iterable* на самом деле не является итерируемым. Конструктор также полезен для копирования set (`c=set(s)`).130131**[PyObject](https://python-all.ru/3.1/c-api/structures.html#PyObject)\* `PyFrozenSet_New`([PyObject](https://python-all.ru/3.1/c-api/structures.html#PyObject) *\*iterable*)**132133*Возвращаемое значение: новая ссылка.*134135Возвращает новый [`frozenset`](https://python-all.ru/3.1/library/stdtypes.html#frozenset), содержащий объекты, возвращаемые *iterable*. Значение *iterable* может быть *NULL* для создания нового пустого frozenset. Возвращает новый frozenset при успехе или *NULL* при неудаче. Вызывает [`TypeError`](https://python-all.ru/3.1/library/exceptions.html#TypeError), если *iterable* на самом деле не является итерируемым.136137Следующие функции и макросы доступны для экземпляров [`set`](https://python-all.ru/3.1/library/stdtypes.html#set) или [`frozenset`](https://python-all.ru/3.1/library/stdtypes.html#frozenset), а также для экземпляров их подтипов.138139**Py\_ssize\_t `PySet_Size`([PyObject](https://python-all.ru/3.1/c-api/structures.html#PyObject) *\*anyset*)**140141Возвращает длину объекта [`set`](https://python-all.ru/3.1/library/stdtypes.html#set) или [`frozenset`](https://python-all.ru/3.1/library/stdtypes.html#frozenset). Эквивалентно `len(anyset)`. Вызывает `PyExc_SystemError`, если *anyset* не является [`set`](https://python-all.ru/3.1/library/stdtypes.html#set), [`frozenset`](https://python-all.ru/3.1/library/stdtypes.html#frozenset) или экземпляром подтипа.142143**Py\_ssize\_t `PySet_GET_SIZE`([PyObject](https://python-all.ru/3.1/c-api/structures.html#PyObject) *\*anyset*)**144145Макроформа146147[`PySet_Size()`](https://python-all.ru/3.1/c-api/set.html#PySet_Size)148149без проверки ошибок.150151**int `PySet_Contains`([PyObject](https://python-all.ru/3.1/c-api/structures.html#PyObject) *\*anyset*, [PyObject](https://python-all.ru/3.1/c-api/structures.html#PyObject) *\*key*)**152153Возвращает 1, если найдено, 0, если не найдено, и -1, если возникла ошибка. В отличие от метода Python154155[`__contains__()`](https://python-all.ru/3.1/reference/datamodel.html#object.__contains__)156157, эта функция не преобразует автоматически нехешируемые множества во временные frozenset. Вызывает158159[`TypeError`](https://python-all.ru/3.1/library/exceptions.html#TypeError)160161, если162163*key*164165нехешируем. Вызывает166167`PyExc_SystemError`168169, если170171*anyset*172173не является174175[`set`](https://python-all.ru/3.1/library/stdtypes.html#set)176177,178179[`frozenset`](https://python-all.ru/3.1/library/stdtypes.html#frozenset)180181или экземпляром подтипа.182183**int `PySet_Add`([PyObject](https://python-all.ru/3.1/c-api/structures.html#PyObject) *\*set*, [PyObject](https://python-all.ru/3.1/c-api/structures.html#PyObject) *\*key*)**184185Добавляет186187*key*188189в экземпляр190191[`set`](https://python-all.ru/3.1/library/stdtypes.html#set)192193. Также работает с экземплярами194195[`frozenset`](https://python-all.ru/3.1/library/stdtypes.html#frozenset)196197(подобно198199[`PyTuple_SetItem()`](https://python-all.ru/3.1/c-api/tuple.html#PyTuple_SetItem)200201, её можно использовать для заполнения значений совершенно новых frozenset до того, как они будут открыты другому коду). Возвращает 0 при успехе или -1 при неудаче. Вызывает202203[`TypeError`](https://python-all.ru/3.1/library/exceptions.html#TypeError)204205, если206207*key*208209нехешируем. Вызывает210211[`MemoryError`](https://python-all.ru/3.1/library/exceptions.html#MemoryError)212213, если нет места для роста. Вызывает214215[`SystemError`](https://python-all.ru/3.1/library/exceptions.html#SystemError)216217, если218219*set*220221не является экземпляром222223[`set`](https://python-all.ru/3.1/library/stdtypes.html#set)224225или его подтипа.226227Следующие функции доступны для экземпляров [`set`](https://python-all.ru/3.1/library/stdtypes.html#set) или его подтипов, но не для экземпляров [`frozenset`](https://python-all.ru/3.1/library/stdtypes.html#frozenset) или его подтипов.228229**int `PySet_Discard`([PyObject](https://python-all.ru/3.1/c-api/structures.html#PyObject) *\*set*, [PyObject](https://python-all.ru/3.1/c-api/structures.html#PyObject) *\*key*)**230231Возвращает 1, если элемент найден и удалён, 0, если не найден (никаких действий не предпринимается), и -1, если произошла ошибка. Не возбуждает232233[`KeyError`](https://python-all.ru/3.1/library/exceptions.html#KeyError)234235для отсутствующих ключей. Возбуждает236237[`TypeError`](https://python-all.ru/3.1/library/exceptions.html#TypeError)238239, если240241*ключ*242243не хешируется. В отличие от метода Python244245`discard()`246247, эта функция не преобразует автоматически нехешируемые множества во временные frozenset. Возбуждает248249`PyExc_SystemError`250251, если252253*set*254255не является экземпляром256257[`set`](https://python-all.ru/3.1/library/stdtypes.html#set)258259или его подтипа.260261**[PyObject](https://python-all.ru/3.1/c-api/structures.html#PyObject)\* `PySet_Pop`([PyObject](https://python-all.ru/3.1/c-api/structures.html#PyObject) *\*set*)**262263*Возвращаемое значение: новая ссылка.*264265Возвращает новую ссылку на произвольный объект из *множества* и удаляет объект из *множества*. В случае ошибки возвращает *NULL*. Вызывает [`KeyError`](https://python-all.ru/3.1/library/exceptions.html#KeyError), если множество пусто. Вызывает [`SystemError`](https://python-all.ru/3.1/library/exceptions.html#SystemError), если *множество* не является экземпляром [`set`](https://python-all.ru/3.1/library/stdtypes.html#set) или его подтипа.266267**int `PySet_Clear`([PyObject](https://python-all.ru/3.1/c-api/structures.html#PyObject) *\*set*)**268269Очищает существующее множество от всех элементов.270