# Conjuntos (Sets) em Python
Um **Conjunto (Set)** em Python é uma coleção não ordenada de itens únicos. Isso significa que um conjunto não pode conter elementos duplicados e a ordem em que os elementos são armazenados não é garantida.
## Definição de Conjuntos
Conjuntos são definidos usando chaves `{}` ou a função `set()`.
**Exemplo de definição:**
```python
# Definindo um conjunto usando chaves
Frutas = {"Maçã", "Banana", "Cereja"}
print(Frutas)
# Definindo um conjunto vazio (é importante usar set() para conjuntos vazios, pois {} cria um dicionário vazio)
ConjuntoVazio = set()
print(ConjuntoVazio)
```
## Características Principais
* **Não Ordenado:** Os elementos em um conjunto não possuem uma ordem específica.
* **Único:** Cada elemento em um conjunto deve ser único. Tentativas de adicionar elementos duplicados são ignoradas.
* **Mutável:** É possível adicionar ou remover elementos de um conjunto após sua criação.
* **Elementos Imutáveis:** Os elementos dentro de um conjunto devem ser de tipos imutáveis (como strings, números, tuplas).
## Operações Comuns com Conjuntos
### Adicionar Elementos
Você pode adicionar um único elemento a um conjunto usando o método `add()`.
```python
Frutas = {"Maçã", "Banana", "Cereja"}
Frutas.add("Laranja")
print(Frutas)
# Saída possível: {'Cereja', 'Laranja', 'Maçã', 'Banana'} (a ordem pode variar)
```
Para adicionar múltiplos elementos de um iterável (como outra lista ou conjunto), use o método `update()`.
```python
Frutas = {"Maçã", "Banana"}
Novas_Frutas = ["Laranja", "Uva"]
Frutas.update(Novas_Frutas)
print(Frutas)
# Saída possível: {'Uva', 'Banana', 'Laranja', 'Maçã'}
```
### Remover Elementos
Você pode remover um elemento específico usando `remove()` ou `discard()`. A diferença é que `remove()` gera um erro se o elemento não existir, enquanto `discard()` não faz nada nesse caso.
```python
Frutas = {"Maçã", "Banana", "Cereja"}
# Usando remove()
Frutas.remove("Banana")
print(Frutas)
# Saída possível: {'Cereja', 'Maçã'}
# Usando discard()
Frutas.discard("Uva") # Não gera erro, pois "Uva" não está no conjunto
print(Frutas)
# Saída possível: {'Cereja', 'Maçã'}
# Tentando remover um elemento inexistente com remove() geraria um KeyError
# Frutas.remove("Pera") # Isso causaria um erro
```
Para remover e retornar um elemento arbitrário do conjunto, use `pop()`.
```python
Frutas = {"Maçã", "Banana", "Cereja"}
elemento_removido = Frutas.pop()
print(f"Elemento removido: {elemento_removido}")
print(f"Conjunto restante: {Frutas}")
# Saída possível:
# Elemento removido: Cereja
# Conjunto restante: {'Maçã', 'Banana'}
```
Para remover todos os elementos de um conjunto, use `clear()`.
```python
Frutas = {"Maçã", "Banana", "Cereja"}
Frutas.clear()
print(Frutas)
# Saída: set()
```
### Operações Matemáticas de Conjuntos
Conjuntos suportam operações matemáticas como união, interseção, diferença e diferença simétrica.
* **União (`|` ou `union()`):** Retorna um novo conjunto com todos os elementos de ambos os conjuntos.
* **Interseção (`&` ou `intersection()`):** Retorna um novo conjunto com os elementos comuns a ambos os conjuntos.
* **Diferença (`-` ou `difference()`):** Retorna um novo conjunto com os elementos do primeiro conjunto que não estão no segundo.
* **Diferença Simétrica (`^` ou `symmetric_difference()`):** Retorna um novo conjunto com os elementos que estão em um dos conjuntos, mas não em ambos.
```python
A = {1, 2, 3, 4}
B = {3, 4, 5, 6}
# União
print(A | B) # Saída: {1, 2, 3, 4, 5, 6}
print(A.union(B)) # Saída: {1, 2, 3, 4, 5, 6}
# Interseção
print(A & B) # Saída: {3, 4}
print(A.intersection(B)) # Saída: {3, 4}
# Diferença
print(A - B) # Saída: {1, 2} (Elementos em A que não estão em B)
print(A.difference(B)) # Saída: {1, 2}
print(B - A) # Saída: {5, 6} (Elementos em B que não estão em A)
print(B.difference(A)) # Saída: {5, 6}
# Diferença Simétrica
print(A ^ B) # Saída: {1, 2, 5, 6}
print(A.symmetric_difference(B)) # Saída: {1, 2, 5, 6}
```
## Quando Usar Conjuntos?
Conjuntos são ideais quando você precisa:
* Garantir que uma coleção de itens não tenha duplicatas.
* Realizar verificações de pertinência (se um item está ou não em uma coleção) de forma muito eficiente.
* Executar operações matemáticas de conjuntos (união, interseção, etc.).
---
**:: Referência::** [Documentação Python sobre tipos nativos](https://docs.python.org/3/library/stdtypes.html)