Objeto Set
**********

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

   Essa é uma instância de "PyTypeObject" representando o tipo Python
   "set"

PyTypeObject PyFrozenSet_Type

   Esta é uma instância de "PyTypeObject" representando o tipo Python
   "frozenset".

As macros de verificação de tipo a seguir funcionam em ponteiros para
qualquer objeto Python. Da mesma forma, as funções construtoras
funcionam com qualquer objeto Python iterável.

int PySet_Check(PyObject *p)

   Retorna verdadeiro se *p* for um objeto "set" ou uma instância de
   um subtipo. Esta função sempre tem sucesso.

int PyFrozenSet_Check(PyObject *p)

   Retorna verdadeiro se *p* for um objeto "frozenset" ou uma
   instância de um subtipo. Esta função sempre tem sucesso.

int PyAnySet_Check(PyObject *p)

   Retorna verdadeiro se *p* for um objeto "set", um objeto
   "frozenset" ou uma instância de um subtipo. Esta função sempre tem
   sucesso.

int PyAnySet_CheckExact(PyObject *p)

   Retorna verdadeiro se *p* for um objeto "set" ou um objeto
   "frozenset", mas não uma instância de um subtipo. Esta função
   sempre tem sucesso.

int PyFrozenSet_CheckExact(PyObject *p)

   Retorna verdadeiro se *p* for um objeto "frozenset", mas não uma
   instância de um subtipo. Esta função sempre tem sucesso.

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

   Retorna uma nova "set" contendo objetos retornados pelo iterável
   *iterable*. O *iterable* pode ser "NULL" para criar um novo
   conjunto vazio. Retorna o novo conjunto em caso de sucesso ou
   "NULL" em caso de falha. Levanta "TypeError" se *iterable* não for
   realmente iterável. O construtor também é útil para copiar um
   conjunto ("c=set(s)").

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

   Retorna uma nova "frozenset" contendo objetos retornados pelo
   iterável *iterable*. O *iterable* pode ser "NULL" para criar um
   novo frozenset vazio. Retorna o novo conjunto em caso de sucesso ou
   "NULL" em caso de falha. Levanta "TypeError" se *iterable* não for
   realmente iterável.

As seguintes funções e macros estão disponíveis para instâncias de
"set" ou "frozenset" ou instâncias de seus subtipos.

Py_ssize_t PySet_Size(PyObject *anyset)

   Retorna o comprimento de um objeto "set" ou "frozenset".
   Equivalente a "len(anyset)". Levanta um "PyExc_SystemError" se
   *anyset* não for um "set", "frozenset", ou uma instância de um
   subtipo.

Py_ssize_t PySet_GET_SIZE(PyObject *anyset)

   Forma macro de "PySet_Size()" sem verificação de erros.

int PySet_Contains(PyObject *anyset, PyObject *key)

   Retorna "1" se encontrado, "0" se não encontrado, e "-1" se um erro
   é encontrado. Ao contrário do método Python "__contains__()", esta
   função não converte automaticamente conjuntos não hasheáveis em
   frozensets temporários. Levanta um "TypeError" se a *key* não for
   hasheável. Levanta "PyExc_SystemError" se *anyset* não é um "set",
   "frozenset", ou uma instância de um 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.

As seguintes funções estão disponíveis para instâncias de "set" ou
seus subtipos, mas não para instâncias de "frozenset" ou seus
subtipos.

int PySet_Discard(PyObject *set, PyObject *key)

   Retorna "1" se encontrado e removido, "0" se não encontrado
   (nenhuma ação realizada) e "-1" se um erro for encontrado. Não
   levanta "KeyError" para chaves ausentes. Levanta uma "TypeError" se
   a *key* não for hasheável. Ao contrário do método Python
   "discard()", esta função não converte automaticamente conjuntos não
   hasheáveis em frozensets temporários. Levanta "PyExc_SystemError"
   se *set* não é uma instância de "set" ou seu subtipo.

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

   Retorna uma nova referência a um objeto arbitrário no *set* e
   remove o objeto do *set*. Retorna "NULL" em caso de falha. Levanta
   "KeyError" se o conjunto estiver vazio. Levanta uma "SystemError"
   se *set* não for uma instância de "set" ou seu subtipo.

int PySet_Clear(PyObject *set)

   Limpa todos os elementos de um conjunto existente
