Tuples e Sets em Python: quando usar cada um – Aula 11

Tuples e Sets em Python

Nesta aula do minicurso de Python, quero abordar dois tipos de coleção que são usadas com frequência no dia a dia do desenvolvimento: tuples e sets em Python. Embora pareçam semelhantes a listas à primeira vista, cada um tem suas características específicas que os tornam ideais para situações diferentes.

O que são Tuples?

Uma tuple é uma coleção ordenada e imutável de elementos. Assim como as listas, elas podem conter qualquer tipo de dado: inteiros, strings, objetos, outras coleções… Mas, ao contrário das listas, não podem ser alteradas após sua criação. Isso significa que não dá para adicionar, remover ou mudar elementos de uma tuple depois que ela foi definida.

A sintaxe é simples:

coordenadas = (10.5, 20.3)

Para acessar elementos, o uso é igual ao das listas:

print(coordenadas[0])  # saída: 10.5

Tuples são úteis quando queremos garantir que os dados não sejam modificados. Também são mais performáticas para leitura e ocupam menos memória. Um caso típico onde uso tuple é para representar pares fixos de valores, como coordenadas geográficas, RGB de cores, ou retornos múltiplos de funções:

def dividir(numerador, denominador):
if denominador == 0:
return (None, "Divisão por zero")
return (numerador / denominador, None)

Como são imutáveis, tuples também são seguras para usar como chaves de dicionários:

pontos = {}
pontos[(1, 2)] = "A"
pontos[(3, 4)] = "B"

Isso é útil em cenários como caching ou mapeamento de coordenadas, onde preciso acessar dados com base em pares fixos.

Sets: coleções sem duplicatas

Já os sets em Python são coleções desordenadas e sem elementos duplicados. A estrutura de set é muito parecida com os conjuntos da matemática. E isso me salva quando quero eliminar duplicatas automaticamente de uma lista:

nomes = ["Ana", "Carlos", "Ana", "João"]
nomes_unicos = set(nomes)
print(nomes_unicos) # saída: {'Carlos', 'João', 'Ana'}

É importante lembrar que a ordem dos elementos não é garantida. Se você precisa manter a ordem, talvez sets não sejam a melhor escolha.

Outra coisa que gosto muito nos sets são as operações de conjunto. Python oferece suporte direto para união, interseção e diferença:

backend = {"Python", "C#", "Java"}
frontend = {"JavaScript", "HTML", "CSS", "Python"}

# Linguagens em comum
print(backend & frontend) # saída: {'Python'}

# União dos dois conjuntos
print(backend | frontend)

# Linguagens só do backend
print(backend - frontend)

Essas operações ajudam bastante, por exemplo, quando precisamos comparar permissões entre dois perfis de usuário, descobrir interseções entre listas de recursos ou validar conjuntos exclusivos.

Além disso, sets são extremamente eficientes para verificação de existência. Em vez de percorrer uma lista inteira com in, o set faz isso com complexidade constante (O(1)):

linguagens = {"Python", "C#", "Java", "Go"}

if "Python" in linguagens:
print("Python está presente!")

Para coleções com milhares de elementos, esse ganho de performance é notável.

Quando usar tuples e sets em Python?

Eu costumo seguir estas regras simples para decidir:

  • Uso tuple quando:
    • Os dados têm uma ordem lógica.
    • Preciso garantir que nada será modificado.
    • Quero usar como chave em dicionários, já que tuples são hashable.
    • Preciso de uma estrutura mais leve e rápida que uma lista.
  • Uso set quando:
    • Preciso remover duplicatas automaticamente.
    • Vou fazer operações matemáticas de conjuntos.
    • Quero fazer verificações de existência de forma rápida.
    • Não preciso me preocupar com a ordem dos itens.

Também podemos usar frozenset quando precisamos de um set imutável. É menos comum, mas aparece em casos onde sets são usados como chaves ou valores fixos.

permissoes = frozenset(["ler", "escrever"])

Considerações finais

Entender bem tuples e sets em Python me ajuda a escrever código mais limpo, eficiente e seguro. Ambos fazem parte da base do Python moderno e aparecem o tempo todo, seja em bibliotecas, APIs ou estruturas internas. Quanto mais cedo você dominar esses dois conceitos, melhor preparado estará para resolver problemas reais no mundo do desenvolvimento backend.

Se quiser se aprofundar, recomendo dar uma olhada na documentação oficial de cada um:

Você também pode gostar