This document is for an old version of Python that is no longer supported. You should upgrade, and read the Python documentation for the current stable release.

# Набір об’єктів

У цьому розділі детально описано публічний API для об’єктів `set` і `frozenset`. Будь-які функції, не перелічені нижче, найкраще отримати доступ за допомогою протоколу абстрактних об’єктів (включно з `PyObject_CallMethod()`, `PyObject_RichCompareBool()`, `PyObject_Hash()`, `PyObject_Repr()`, `PyObject_IsTrue()`, `PyObject_Print()` і `PyObject_GetIter()`) або протокол абстрактних чисел (включно з `PyNumber_And()`, `PyNumber_Subtract()`, `PyNumber_Or()`, `PyNumber_Xor()`, `PyNumber_InPlaceAnd()`, `PyNumber_InPlaceSubtract()`, `PyNumber_InPlaceOr()`, і `PyNumber_InPlaceXor()`).

`PySetObject`

  Цей підтип `PyObject` використовується для зберігання внутрішніх даних для об’єктів `set` і `frozenset`. Це схоже на `PyDictObject` тим, що він має фіксований розмір для невеликих наборів (подібно до сховища кортежів) і вказуватиме на окремий блок пам’яті змінного розміру для середніх і великих наборів (подібно списку зберігання). Жодне з полів цієї структури не можна вважати відкритим, і всі можуть бути змінені. Весь доступ має здійснюватися через задокументований API, а не шляхом маніпулювання значеннями в структурі.

PyTypeObject `PySet_Type`

  Це екземпляр `PyTypeObject`, що представляє тип `set` Python.

PyTypeObject `PyFrozenSet_Type`

  Це екземпляр `PyTypeObject`, що представляє тип `frozenset` Python.

Наступні макроси перевірки типу працюють з покажчиками на будь-який об’єкт Python. Подібним чином функції конструктора працюють з будь-яким ітерованим об’єктом Python.

int `PySet_Check`(PyObject *p)

  Повертає true, якщо p є об’єктом `set` або екземпляром підтипу. Ця функція завжди успішна.

int `PyFrozenSet_Check`(PyObject *p)

  Повертає true, якщо p є об’єктом `frozenset` або екземпляром підтипу. Ця функція завжди успішна.

int `PyAnySet_Check`(PyObject *p)

  Повертає true, якщо p є об’єктом `set`, об’єктом `frozenset` або екземпляром підтипу. Ця функція завжди успішна.

int `PyAnySet_CheckExact`(PyObject *p)

  Повертає true, якщо p є об’єктом `set` або об’єктом `frozenset`, але не екземпляром підтипу. Ця функція завжди успішна.

int `PyFrozenSet_CheckExact`(PyObject *p)

  Повертає true, якщо p є об’єктом `frozenset`, але не є екземпляром підтипу. Ця функція завжди успішна.

PyObject* `PySet_New`(PyObject *iterable)
  Return value: New reference.

  Повертає новий `set`, що містить об’єкти, повернуті iterable. Iterable може бути `NULL` для створення нового порожнього набору. Повертає новий набір у разі успіху або `NULL` у разі невдачі. Викликати `TypeError`, якщо iterable насправді не можна ітерувати. Конструктор також корисний для копіювання набору (`c=set(s)`).

PyObject* `PyFrozenSet_New`(PyObject *iterable)
  Return value: New reference.

  Повертає новий `frozenset`, що містить об’єкти, повернуті iterable. Iterable може бути `NULL` для створення нового порожнього замороженого набору. Повертає новий набір у разі успіху або `NULL` у разі невдачі. Викликати `TypeError`, якщо iterable насправді не можна ітерувати.

Наступні функції та макроси доступні для екземплярів `set` або `frozenset` або екземплярів їхніх підтипів.

Py_ssize_t `PySet_Size`(PyObject *anyset)

  Return the length of a `set` or `frozenset` object. Equivalent to `len(anyset)`. Raises a `PyExc_SystemError` if anyset is not a `set`, `frozenset`, or an instance of a subtype.

Py_ssize_t `PySet_GET_SIZE`(PyObject *anyset)

  Макроформа `PySet_Size()` без перевірки помилок.

int `PySet_Contains`(PyObject *anyset, PyObject *key)

  Return `1` if found, `0` if not found, and `-1` if an error is encountered. Unlike the Python `__contains__()` method, this function does not automatically convert unhashable sets into temporary frozensets. Raise a `TypeError` if the key is unhashable. Raise `PyExc_SystemError` if anyset is not a `set`, `frozenset`, or an instance of a subtype.

int `PySet_Add`(PyObject *set, PyObject *key)

  Додайте key до екземпляра `set`. Також працює з екземплярами `frozenset` (наприклад, `PyTuple_SetItem()`, його можна використовувати для заповнення значень абсолютно нових заморожених наборів перед тим, як вони будуть представлені в іншому коді). Повертає `0` у разі успіху або `-1` у разі невдачі. Викликати `TypeError`, якщо ключ не хешується. Викликайте `MemoryError`, якщо немає місця для зростання. Викликати `SystemError`, якщо set не є екземпляром `set` або його підтипу.

Наступні функції доступні для екземплярів `set` або його підтипів, але не для екземплярів `frozenset` або його підтипів.

int `PySet_Discard`(PyObject *set, PyObject *key)

  Return `1` if found and removed, `0` if not found (no action taken), and `-1` if an error is encountered. Does not raise `KeyError` for missing keys. Raise a `TypeError` if the key is unhashable. Unlike the Python `discard()` method, this function does not automatically convert unhashable sets into temporary frozensets. Raise `PyExc_SystemError` if set is not an instance of `set` or its subtype.

PyObject* `PySet_Pop`(PyObject *set)
  Return value: New reference.

  Повертає нове посилання на довільний об’єкт у set та видаляє об’єкт із set. Повертає `NULL` у разі помилки. Викликати `KeyError`, якщо набір порожній. Викликати `SystemError`, якщо set не є екземпляром `set` або його підтипу.

int `PySet_Clear`(PyObject *set)

  Empty an existing set of all elements.