Документация Python неофициальный перевод

set.md

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

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