Algoritmos

Tupla em Python: o que é e como desempacotar valores

Capa do artigo Tupla em Python: o que é e como desempacotar valores
Leitura com foco

Entenda o contexto.
Leve para a prática.

Neste artigo
  1. Como criar uma tupla em Python?
  2. Qual é a diferença entre tupla e lista?
  3. O que é desempacotar?
  4. Como trocar dois valores de lugar?
  5. Como uma função devolve dois valores?
  6. Aí você pergunta: e o for com duas variáveis?
  7. Quais são os erros mais comuns com tuplas?
  8. Agora é com você!

Tupla é uma sequência de valores, separados por vírgula, que não pode ser alterada depois de criada. Desempacotar é distribuir os valores de uma sequência em várias variáveis de uma vez, em uma única linha de código.

No artigo sobre vetores e matrizes você aprendeu a guardar vários valores em um nome só. E no artigo sobre funções, viu que uma função devolve um resultado. Agora olhe esta linha de Python: a, b = b, a. Duas variáveis de um lado, duas do outro, e nenhuma lista à vista. Linhas assim vão aparecer bastante nos próximos artigos, e este aqui existe para que nenhuma delas trave a sua leitura.

Pense em um ponto no mapa. Ele é formado por dois números, a latitude e a longitude, que andam sempre juntos e sempre na mesma ordem. Se você trocar um dos dois, já é outro lugar. Ninguém “edita” um ponto: escolhe outro ponto. A tupla é isso: um pacote fechado de valores, em que a posição de cada um tem significado.

Como criar uma tupla em Python?

Basta separar os valores com vírgula. Os parênteses são opcionais na maioria dos casos, mas ajudam a enxergar onde a tupla começa e termina:

ponto = (3, 5)
print(ponto)
print(ponto[0])
print(len(ponto))

cores = "azul", "verde", "roxo"
print(cores)

um_so = (7,)
print(um_so, len(um_so))

Saída:

(3, 5)
3
2
('azul', 'verde', 'roxo')
(7,) 1

Repare na última linha. Para criar uma tupla com um valor só, a vírgula é obrigatória: (7,). É a vírgula que faz a tupla, e não os parênteses. O tutorial oficial do Python descreve a tupla exatamente assim: valores separados por vírgula.

Qual é a diferença entre tupla e lista?

As duas guardam valores em ordem, e as duas usam índice a partir do zero. A diferença está no que acontece depois da criação:

ListaTupla
Como se escreve[3, 5](3, 5)
Dá para trocar um valor?SimNão
Dá para acrescentar ou remover?SimNão
Uso mais comumColeção de itens do mesmo tipo, que cresce e mudaRegistro fechado, em que cada posição tem um significado
Diferença entre lista e tupla em Python.

Veja a diferença na prática:

compras = ["arroz", "feijão"]
compras[0] = "macarrão"
print(compras)

ponto = (3, 5)
ponto[0] = 10

Saída (da mensagem de erro, só a última linha):

['macarrão', 'feijão']
TypeError: 'tuple' object does not support item assignment

A lista aceitou a troca. A tupla não: o programa parou com um erro, e a mensagem diz que a tupla não aceita atribuição em uma posição. Sacou? Quando um conjunto de valores não deve mudar, a tupla protege você de mudar sem querer.

O que é desempacotar?

É o caminho de volta: pegar a tupla e entregar cada valor para uma variável. A ordem manda: o primeiro valor vai para a primeira variável, o segundo para a segunda.

aluno = ("Ana", 30)
nome, idade = aluno
print(nome)
print(idade)

Saída:

Ana
30
Diagrama da tupla aluno, com Ana e 30, sendo desempacotada nas variáveis nome e idade
Desempacotar: cada valor da tupla vai para uma variável, seguindo a ordem.

O tutorial do Python chama a ida de empacotar (vários valores viram uma tupla) e a volta de desempacotar. E avisa: do lado esquerdo do sinal de igual, é preciso ter a mesma quantidade de variáveis que a sequência tem de valores.

ATENÇÃO: desempacotar funciona com qualquer sequência, e não só com tupla. Uma lista de dois valores também pode ser desempacotada em duas variáveis.

Como trocar dois valores de lugar?

Este é o uso que você mais vai ver nos algoritmos de ordenação. Trocar dois valores parece simples, mas tem uma armadilha: se você escrever a = b, o valor antigo de a some. A saída clássica é usar uma terceira variável para guardar esse valor. Veja em C:

#include <stdio.h>

int main(void)
{
    int a = 5;
    int b = 3;

    int auxiliar = a; // guarda o 5 antes de perder
    a = b;
    b = auxiliar;

    printf("%d %d\n", a, b);
    return 0;
}

Saída:

3 5

Em Python, o desempacotamento resolve em uma linha:

a = 5
b = 3
a, b = b, a
print(a, b)

Saída:

3 5

O Python primeiro monta a tupla do lado direito, com os valores atuais de b e a, e só depois distribui. Por isso nada se perde. O tutorial oficial resume: a atribuição múltipla é a combinação de empacotar com desempacotar.

Diagrama comparando a troca de dois valores com variável auxiliar, em três passos, e com desempacotamento, em uma linha
A mesma troca de dois jeitos: três passos com variável auxiliar, uma linha com desempacotamento.

Em PHP a ideia é a mesma, com colchetes:

<?php

$a = 5;
$b = 3;
[$a, $b] = [$b, $a];
echo "$a $b\n";

Saída:

3 5

O manual do PHP chama esse recurso de desestruturação de array, e a escrita com colchetes existe desde o PHP 7.1. Foque no conceito, e não na linguagem!

Como uma função devolve dois valores?

Uma função devolve um resultado só. Mas esse resultado pode ser uma tupla, e aí cabem vários valores dentro dele:

def menor_e_maior(valores):
    menor = valores[0]
    maior = valores[0]
    for valor in valores:
        if valor < menor:
            menor = valor
        if valor > maior:
            maior = valor
    return menor, maior


notas = [7.5, 8.0, 6.5, 9.0]
resultado = menor_e_maior(notas)
print(resultado)

menor, maior = menor_e_maior(notas)
print(menor)
print(maior)

Saída:

(6.5, 9.0)
6.5
9.0

Na primeira chamada, o resultado ficou inteiro em uma variável, e o print mostrou a tupla. Na segunda, o resultado foi desempacotado direto em menor e maior. Repare que o return menor, maior nem usa parênteses: a vírgula já monta a tupla.

Aí você pergunta: e o for com duas variáveis?

É desempacotamento também! Quando cada item de uma lista é uma tupla, o for pode abrir o item em duas variáveis a cada volta:

alunos = [("Ana", 7.5), ("Bruno", 8.5), ("Carla", 6.5)]

for nome, nota in alunos:
    print(nome, nota)

for posicao, aluno in enumerate(alunos):
    print(posicao, aluno[0])

Saída:

Ana 7.5
Bruno 8.5
Carla 6.5
0 Ana
1 Bruno
2 Carla

Na segunda parte aparece a função enumerate, que entrega dois valores por volta: a posição e o item. O tutorial do Python mostra esse mesmo uso, com duas variáveis no for.

Em PHP, o foreach aceita os colchetes no mesmo lugar:

<?php

$alunos = [["Ana", 7.5], ["Bruno", 8.5], ["Carla", 6.5]];

foreach ($alunos as [$nome, $nota]) {
    echo "$nome $nota\n";
}

Saída:

Ana 7.5
Bruno 8.5
Carla 6.5

Em C não existe tupla. Para agrupar valores de tipos diferentes, a linguagem oferece a struct, que é assunto para outro artigo.

Quais são os erros mais comuns com tuplas?

  • Esquecer a vírgula na tupla de um valor só. (5) é apenas o número 5 entre parênteses. A tupla é (5,).
  • Desempacotar com a quantidade errada. Escrever a, b = (1, 2, 3) faz o programa parar com a mensagem ValueError: too many values to unpack (expected 2): valores demais para duas variáveis.
  • Tentar alterar a tupla. Se o conjunto precisa mudar, o certo é usar uma lista.
  • Trocar a ordem das variáveis. O desempacotamento não olha para os nomes, só para a posição. Em idade, nome = ("Ana", 30), a variável idade recebe “Ana”.

Confira o primeiro erro da lista:

numero = (5)
print(type(numero))

tupla = (5,)
print(type(tupla))

Saída:

<class 'int'>
<class 'tuple'>

Agora é com você!

Primeiro no papel, sem rodar nada. As variáveis começam assim: a = 1, b = 2 e c = 3. Depois da linha a, b, c = c, a, b, quanto vale cada uma? Anote a resposta e só então confira no computador.

Depois, escreva uma função que recebe uma lista de notas e devolve duas coisas de uma vez: a soma e a média. Chame a função e desempacote o resultado em duas variáveis. Tente sozinho, sem pedir a resposta pronta para ninguém, nem para a IA!

No próximo artigo desta série de base, a list comprehension: como montar uma lista inteira em uma linha. Até lá!

Confiança Sempre!!!

Fontes:

  • Python Software Foundation, tutorial oficial. Data Structures, com as seções sobre tuplas e sequências, empacotamento, desempacotamento e o uso de enumerate no for.
  • PHP, manual oficial. list, com a atribuição de variáveis a partir de um array e a desestruturação de arrays.
  • PHP, proposta de mudança da linguagem (RFC). Square bracket syntax for array destructuring assignment, com a escrita em colchetes para a desestruturação.
  • Python Software Foundation, proposta de melhoria da linguagem. PEP 3132: Extended Iterable Unpacking, com o desempacotamento em que um nome recebe os itens restantes.
  • University of Vermont, livro do curso CS 1210. Sequence unpacking, com o desempacotamento de tuplas e de retornos de função.
  • Cornell University, Center for Advanced Computing. Tuples, dictionaries, sets, com a tupla como sequência que não muda e o uso como chave de dicionário.
  • Python for Everybody, capítulo 10. Tuples, com a atribuição por tupla e o for com duas variáveis.
  • Lista de discussão Tutor, python.org. Why can you swap an immutable tuple?, com a explicação de que a troca de valores é um desempacotamento de sequência.
  • OpenMV, documentação oficial. Tuples, com a criação da tupla só com vírgulas.
  • Os exemplos deste artigo foram executados em Python 3.13, PHP 8.3 e GCC 13.
Sobre quem escreve

Walmir Silva

Olá! Sou Walmir, engenheiro de software com MBA em Engenharia de Software e o cérebro por trás do GrowthCode e autor do livro "Além do Código".

Se você acha que programação é apenas sobre escrever código, prepare-se para expandir seus horizontes. Aqui, nós vamos além do código e exploramos as interseções fascinantes entre tecnologia, negócios, artes e filosofia.

Você está em busca de crescimento na carreira? Quer se destacar em um mercado competitivo? Almeja uma vida mais rica em conhecimento e realização? Então você chegou ao lugar certo. No GrowthCode, oferecemos insights profundos, estratégias comprovadas e um toque de sabedoria filosófica para catalisar seu crescimento pessoal e profissional.

Ver todos os artigos →

Continue a conversa

Compartilhe sua perspectiva

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Encontre sua próxima resposta

O que você quer aprender?

Preferências de cookies

Os cookies opcionais começam desligados. Você pode mudar a escolha a qualquer momento por esta tela.

NecessáriosSempre ativos

Guardam a sua escolha de cookies e mantêm o site funcionando. Não são usados para publicidade.

Contam visitas e mostram como o site é usado: Google Analytics e Microsoft Clarity, carregados pelo Google Tag Manager. Como esse contêiner também carrega tags de publicidade, as estatísticas só são ativadas junto com Publicidade e marketing.

Exibem anúncios do Google AdSense e medem campanhas e e-mails: pixels da Meta e do TikTok e o Mautic.

Permite que o Google escolha anúncios com base nos seus interesses. Desligado, os anúncios aparecem sem personalização. Depende de Publicidade e marketing.

Também é possível bloquear cookies nas configurações do navegador. Detalhes na Política de privacidade.