set.md · Markdown – Документация Python
Документация Python неофициальный перевод

set.md

96 строк · 12.8 КБ · обычная страница · сырой текст · скачать

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