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.
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.
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.
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.