# Objetos Conjunto

This section details the public API for `set` and `frozenset` objects. Any functionality not listed below is best accessed using either the abstract object protocol (including `PyObject_CallMethod()`, `PyObject_RichCompareBool()`, `PyObject_Hash()`, `PyObject_Repr()`, `PyObject_IsTrue()`, `PyObject_Print()`, and `PyObject_GetIter()`) or the abstract number protocol (including `PyNumber_And()`, `PyNumber_Subtract()`, `PyNumber_Or()`, `PyNumber_Xor()`, `PyNumber_InPlaceAnd()`, `PyNumber_InPlaceSubtract()`, `PyNumber_InPlaceOr()`, and `PyNumber_InPlaceXor()`).

`PySetObject`

  This subtype of `PyObject` is used to hold the internal data for both `set` and `frozenset` objects. It is like a `PyDictObject` in that it is a fixed size for small sets (much like tuple storage) and will point to a separate, variable sized block of memory for medium and large sized sets (much like list storage). None of the fields of this structure should be considered public and all are subject to change. All access should be done through the documented API rather than by manipulating the values in the structure.

PyTypeObject `PySet_Type`

  Esta es una instancia de `PyTypeObject` que representa el tipo Python `set`.

PyTypeObject `PyFrozenSet_Type`

  Esta es una instancia de `PyTypeObject` que representa el tipo Python `frozenset`.

Los siguientes macros de comprobación de tipos funcionan en punteros a cualquier objeto de Python. Del mismo modo, las funciones del constructor funcionan con cualquier objeto Python iterable.

int `PySet_Check`(PyObject *p)

  Retorna verdadero si p es un objeto `set` o una instancia de un subtipo. Esta función siempre finaliza con éxito.

int `PyFrozenSet_Check`(PyObject *p)

  Retorna verdadero si p es un objeto `frozenset` o una instancia de un subtipo. Esta función siempre finaliza con éxito.

int `PyAnySet_Check`(PyObject *p)

  Retorna verdadero si p es un objeto `set`, un objeto `frozenset`, o una instancia de un subtipo. Esta función siempre finaliza con éxito.

int `PyAnySet_CheckExact`(PyObject *p)

  Retorna verdadero si p es un objeto `set` o un objeto `frozenset` pero no una instancia de un subtipo. Esta función siempre finaliza con éxito.

int `PyFrozenSet_CheckExact`(PyObject *p)

  Retorna verdadero si p es un objeto `frozenset` pero no una instancia de un subtipo. Esta función siempre finaliza con éxito.

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

  Retorna un nuevo `set` que contiene objetos retornados por iterable. El iterable puede ser `NULL` para crear un nuevo conjunto vacío. Retorna el nuevo conjunto en caso de éxito o `NULL` en caso de error. Lanza `TypeError` si iterable no es realmente iterable. El constructor también es útil para copiar un conjunto (`c=set(s)`).

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

  Retorna un nuevo `frozenset` que contiene objetos retornados por iterable. El iterable puede ser `NULL` para crear un nuevo conjunto congelado vacío. Retorna el nuevo conjunto en caso de éxito o `NULL` en caso de error. Lanza `TypeError` si iterable no es realmente iterable.

Las siguientes funciones y macros están disponibles para instancias de `set` o `frozenset` o instancias de sus subtipos.

Py_ssize_t `PySet_Size`(PyObject *anyset)

  Retorna la longitud de un objeto `set` o `frozenset`. Equivalente a `len(anyset)`. Lanza un `PyExc_SystemError` si anyset no es `set`, `frozenset`, o una instancia de un subtipo.

Py_ssize_t `PySet_GET_SIZE`(PyObject *anyset)

  Forma macro de `PySet_Size()` sin comprobación de errores.

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

  Retorna `1` si se encuentra, `0` si no se encuentra y `-1` si se encuentra un error. A diferencia del método Python `__contains__()`, esta función no convierte automáticamente conjuntos no compartibles en congelados temporales. Lanza un `TypeError` si la key no se puede compartir. Lanza `PyExc_SystemError` si anyset no es un `set`, `frozenset`, o una instancia de un subtipo.

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

  Add key to a `set` instance. Also works with `frozenset` instances (like `PyTuple_SetItem()` it can be used to fill in the values of brand new frozensets before they are exposed to other code). Return `0` on success or `-1` on failure. Raise a `TypeError` if the key is unhashable. Raise a `MemoryError` if there is no room to grow. Raise a `SystemError` if set is not an instance of `set` or its subtype.

Las siguientes funciones están disponibles para instancias de `set` o sus subtipos, pero no para instancias de `frozenset` o sus subtipos.

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

  Retorna `1` si se encuentra y se elimina, `0` si no se encuentra (no se realiza ninguna acción) y `-1` si se encuentra un error. No lanza `KeyError` por faltar claves. Lanza un `TypeError` si la key no se puede compartir. A diferencia del método Python `discard()`, esta función no convierte automáticamente conjuntos no compartibles en congelados temporales. Lanza `PyExc_SystemError` si set no es una instancia de `set` o su subtipo.

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

  Retorna una nueva referencia a un objeto arbitrario en el set y elimina el objeto del set. Retorna `NULL` en caso de falla. Lanza `KeyError` si el conjunto está vacío. Lanza a `SystemError` si set no es una instancia de `set` o su subtipo.

int `PySet_Clear`(PyObject *set)

  Vacía un conjunto existente de todos los elementos.