programandoai

Tuplas e sets: imutável e sem repetição

Nem todo dado deveria poder mudar depois de criado, e nem toda coleção deveria permitir itens repetidos. Tuplas e sets existem exatamente para esses dois casos.

Estudar esta lição interativa →

Guardar as coordenadas geográficas de uma loja como uma lista, [-23.55, -46.63], deixa uma porta aberta perigosa: nada impede que, em algum lugar do código, alguém escreva coordenadas[0] = 0 por engano, corrompendo um dado que nunca deveria mudar depois de definido. Para dados que representam algo fixo por natureza, o Python tem uma coleção própria, parecida com a lista, mas travada contra mudanças: a tupla.

coordenadas = (-23.55, -46.63)
latitude, longitude = coordenadas

print(latitude)
print(longitude)

Desempacotamento: latitude e longitude recebem os valores da tupla direto, na ordem.

Coordenadas geográficas são um bom exemplo de dado que não deveria poder mudar por acidente no meio do programa: uma tupla, em geral escrita com parênteses ( ) em vez de colchetes, é parecida com uma lista, mas imutável. Ela é lida, percorrida e desempacotada igual a uma lista, mas nenhum item pode ser trocado depois de criada. (Quem cria a tupla é a vírgula: (5,) é uma tupla de um item, enquanto (5) é só o número 5. E a imutabilidade é rasa: numa tupla que guarda uma lista, a lista de dentro ainda pode mudar.)

Pense numa tupla como um envelope lacrado com um certificado dentro: você pode abrir e ler o conteúdo quantas vezes quiser, mas não pode rabiscar por cima do que já está impresso. Uma lista é mais como um quadro branco, sempre aberto a apagar e reescrever.

Agora o set (conjunto): uma coleção, criada com itens entre chaves ({1, 2, 3}) ou com set(...), que nunca guarda itens repetidos e não mantém uma ordem garantida. Cuidado com o conjunto vazio: {} cria um dicionário, e o set vazio é set(). O caso de uso mais comum é remover duplicatas de uma lista rapidamente, convertendo-a para set e de volta para lista:

cores = ["azul", "verde", "azul", "amarelo", "verde", "azul"]

cores_unicas = list(set(cores))
print(cores_unicas)
print(len(cores), "->", len(cores_unicas))

Convertendo para set e de volta para lista, as repetições somem.

Sets também fazem álgebra de conjuntos

a | b é a união (itens de qualquer um dos dois), a & b é a interseção (itens presentes nos dois), e a - b é a diferença (itens só em a, ausentes em b). É útil, por exemplo, para comparar dois grupos de clientes: quem está nos dois, quem está só num deles.

Tentar mudar uma tupla quebra o programa

coordenadas[0] = -22.0, numa tupla, gera TypeError: 'tuple' object does not support item assignment. Essa é literalmente a definição de imutabilidade em ação: se você precisa de uma coleção que vai mudar ao longo do programa, uma lista é a escolha certa; se o dado representa algo que não deveria mudar (coordenadas fixas, um par de RGB, o resultado de uma consulta que não deve ser alterado por engano), uma tupla comunica essa intenção, e o próprio Python garante isso.

emails_cadastrados = ["ana@ex.com", "bruno@ex.com", "ana@ex.com", "carla@ex.com", "bruno@ex.com"]

emails_unicos = set(emails_cadastrados)
print(len(emails_unicos))

Converta a lista para set e imprima o tamanho.

Complete a função contar_votos(votos): recebendo uma lista de nomes de candidatos (com repetição), devolva um dicionário onde cada chave é um nome e o valor é quantas vezes ele aparece na lista.
def contar_votos(votos):
    contagem = {}
    # para cada voto na lista, some 1 na contagem daquele nome
    # dica: contagem.get(nome, 0) devolve 0 se o nome ainda não estiver no dicionário
    return contagem

🧩 Este é um exercício com correção automática — abra no app para completá-lo e verificar.

← Voltar ao índice do curso