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

Esta seção detalha a API pública para os objetos "set" e "frozenset".
Qualquer funcionalidade não listada abaixo é melhor acessada usando o
protocolo de objeto abstrato (incluindo "PyObject_CallMethod()",
"PyObject_RichCompareBool()", "PyObject_Hash()", "PyObject_Repr()",
"PyObject_IsTrue()", "PyObject_Print()", and "PyObject_GetIter()") ou
o protocolo abstrato de número (incluindo "PyNumber_And()",
"PyNumber_Subtract()", "PyNumber_Or()", "PyNumber_Xor()",
"PyNumber_InPlaceAnd()", "PyNumber_InPlaceSubtract()",
"PyNumber_InPlaceOr()" e "PyNumber_InPlaceXor()").

PySetObject

   Este subtipo de "PyObject" é usado para manter os dados internos
   para ambos os objetos "set" e "frozenset". É como um "PyDictObject"
   em que tem um tamanho fixo para conjuntos pequenos (muito parecido
   com o armazenamento de tupla) e apontará para um bloco de memória
   de tamanho variável separado para conjuntos de tamanho médio e
   grande (muito parecido com lista armazenamento). Nenhum dos campos
   desta estrutura deve ser considerado público e está sujeito a
   alterações. Todo o acesso deve ser feito por meio da API
   documentada, em vez de manipular os valores na estrutura.

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.

int PyFrozenSet_Check(PyObject *p)

   Retorna verdadeiro se *p* for um objeto "frozenset" ou uma
   instância de um subtipo.

int PyAnySet_Check(PyObject *p)

   Retorna verdadeiro se *p* for um objeto "set", um objeto
   "frozenset" ou uma instância de um subtipo.

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.

int PyFrozenSet_CheckExact(PyObject *p)

   Retorna verdadeiro se *p* for um objeto "frozenset", mas não uma
   instância de um subtipo.

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)

   Adiciona *key* a uma instância de "set". Também funciona com
   instâncias de "frozenset" (como "PyTuple_SetItem()", ele pode ser
   usado para preencher os valores de novos conjuntos de congelamentos
   antes que eles sejam expostos a outro código). Retorna "0" em caso
   de sucesso ou "-1" em caso de falha. Levanta um "TypeError" se a
   *key* não for hasheável. Levanta uma "MemoryError" se não houver
   espaço para crescer. Levanta uma "SystemError" se *set* não for uma
   instância de "set" ou seu subtipo.

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

int PySet_ClearFreeList()

   Limpe a lista livre. Retorna o número total de itens liberados.

   Novo na versão 3.3.
