Em Python, tanto set quanto frozenset são estruturas de dados que armazenam coleções não ordenadas de elementos únicos. A principal diferença está na mutabilidade.
Set (Mutável)
Um set é uma coleção mutável – você pode adicionar, remover e modificar elementos após a criação.
Características:
- Mutável
- Não ordenado
- Elementos únicos
- Não indexado
Exemplo de uso:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
# Criando um set meu_set = {1, 2, 3, 4, 5} print("Set original:", meu_set) # Adicionando elementos meu_set.add(6) print("Após add(6):", meu_set) # Removendo elementos meu_set.remove(3) print("Após remove(3):", meu_set) # Tentando usar como chave de dicionário (gera erro) try: dicionario = {meu_set: "valor"} except TypeError as e: print("Erro ao usar set como chave:", e) |
Frozenset (Imutável)
Um frozenset é uma versão imutável do set – após a criação, não pode ser modificado.
Características:
- Imutável
- Não ordenado
- Elementos únicos
- Pode ser usado como chave de dicionário
Exemplo de uso:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
# Criando um frozenset meu_frozenset = frozenset([1, 2, 3, 4, 5]) print("Frozenset original:", meu_frozenset) # Tentativas de modificação (geram erro) try: meu_frozenset.add(6) except AttributeError as e: print("Erro ao tentar add():", e) try: meu_frozenset.remove(3) except AttributeError as e: print("Erro ao tentar remove():", e) # Usando como chave de dicionário (funciona) dicionario = {meu_frozenset: "valor"} print("Como chave de dicionário:", dicionario[meu_frozenset]) |
Vantagens do Set:
- Pode ser modificado conforme necessário
- Útil para operações que requerem alterações frequentes
- Métodos como add(), remove(), discard(), etc.
Desvantagens do Set:
- Não pode ser usado como chave de dicionário
- Não é hasheável
- Menos seguro em contextos que requerem imutabilidade
Vantagens do Frozenset:
- Imutável e seguro para uso em contextos que requerem imutabilidade
- Pode ser usado como chave de dicionário
- É hasheável
Desvantagens do Frozenset:
- Não pode ser modificado após a criação
- Menos flexível para operações dinâmicas
- Não possui métodos de modificação
Relação entre Set e Frozenset
É possível converter entre set e frozenset conforme necessário:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
# Convertendo set para frozenset meu_set = {1, 2, 3, 4, 5} meu_frozenset = frozenset(meu_set) print("Set convertido para frozenset:", meu_frozenset) # Convertendo frozenset para set outro_set = set(meu_frozenset) print("Frozenset convertido para set:", outro_set) # Operações entre set e frozenset set_a = {1, 2, 3} frozenset_b = frozenset([3, 4, 5]) # União uniao = set_a | frozenset_b print("União:", uniao) # Interseção intersecao = set_a & frozenset_b print("Interseção:", intersecao) |
Guia de Decisão: Quando usar cada um
Use set quando:
- Você precisa modificar a coleção frequentemente
- Não precisa usar a coleção como chave de dicionário
- Está trabalhando com dados que mudam dinamicamente
Use frozenset quando:
- Você precisa de uma coleção imutável
- Quer usar a coleção como chave de dicionário
- Está trabalhando com dados que não devem mudar
- Precisa de segurança contra modificações acidentais
Conclusão
Tanto set quanto frozenset são úteis em diferentes contextos. A escolha entre eles depende principalmente se você precisa de mutabilidade ou imutabilidade. Enquanto os sets são flexíveis e mutáveis, os frozensets oferecem imutabilidade e a capacidade de serem usados como chaves em dicionários.