Tuplas em Python: quando e por que usar sequências imutáveis
Este tutorial foi traduzido do original em inglês.Read in EnglishLeer en españolЧитать на русскомอ่านภาษาไทยAvisar sobre um erro de tradução
Pense em coordenadas de GPS. Uma localização como (40.7128, -74.0060) representa a cidade de Nova York. Se você mudasse sem querer um desses números, a localização apontaria para um lugar completamente diferente. Alguns dados não devem mudar depois de criados.
Datas funcionam do mesmo jeito. 1º de janeiro de 2025 é um fato fixo. Você não gostaria que o código alterasse essa data por acidente para 37 de fevereiro. Quando os dados precisam ficar travados, o Python oferece as tuplas.
Uma tupla é quase idêntica a uma lista, mas com uma diferença crucial: depois de criar uma tupla, você não pode alterá-la. Nada de adicionar, remover ou trocar itens. Neste tutorial, você vai ver por que essa limitação é, na verdade, um superpoder.
Como criar tuplas em Python
Você cria uma tupla colocando itens entre parênteses (), separados por vírgulas. Também dá para criar uma tupla sem parênteses: são as vírgulas que realmente fazem dela uma tupla.
(40.7128, -74.006)
('red', 'green', 'blue')
(42,)
<class 'tuple'><class 'int'> <class 'tuple'> () 0
Você também pode converter outras sequências em tuplas usando o construtor tuple(). Isso é útil quando você tem uma lista e quer "congelá-la" para que ninguém possa modificá-la.
('apple', 'banana', 'cherry')
('h', 'e', 'l', 'l', 'o')Acessando e fatiando elementos de uma tupla
Acessar os itens de uma tupla funciona exatamente como nas listas. Você usa colchetes com um número de índice. Índices positivos contam a partir do início; índices negativos contam a partir do fim.
Jan Apr Jun May 6
O fatiamento também funciona do mesmo jeito. Você pode pegar um pedaço de uma tupla com tuple[start:end]. O resultado é uma nova tupla.
('Feb', 'Mar', 'Apr')
('Jan', 'Feb', 'Mar')
('May', 'Jun')
('Jan', 'Mar', 'May')Mas é aqui que as tuplas se diferenciam das listas. Se você tentar alterar um item, o Python vai gerar um TypeError. Tuplas são imutáveis: não podem ser modificadas depois de criadas.
red
Empacotamento e desempacotamento de tuplas
Empacotar (packing) é criar uma tupla atribuindo vários valores a uma única variável. Desempacotar (unpacking) é o contrário: tirar os valores de uma tupla e colocá-los em variáveis separadas. O desempacotamento é um dos recursos mais úteis do Python.
('Alice', 25, 'Engineer')
Alice
25
EngineerO número de variáveis à esquerda precisa ser igual ao número de itens da tupla. Se não for, o Python gera um ValueError.
Um uso clássico do desempacotamento é trocar os valores de duas variáveis sem precisar de uma variável temporária. A maioria das outras linguagens precisa de três linhas para isso; o Python faz em uma.
Before: a=10, b=20 After: a=20, b=10
Você também pode usar um asterisco * para capturar os itens que sobram no desempacotamento. Isso se chama desempacotamento estendido, e ele devolve uma lista com os itens restantes.
95 [87, 72, 68] 91
Alice scored 95 Bob scored 87 Charlie scored 72
Tuplas ou listas: quando usar cada uma
Se tuplas são só listas que não podem ser alteradas, por que usá-las? Há três bons motivos: segurança, desempenho e chaves de dicionário.
Segurança: quando os dados não devem mudar, uma tupla impede alterações acidentais. Coordenadas de GPS, valores de cor RGB, registros de banco de dados: tudo isso são fatos fixos. Uma tupla deixa sua intenção clara.
Desempenho: tuplas são um pouco mais rápidas que listas e usam menos memória. Em coleções pequenas, isso quase não faz diferença, mas a diferença se acumula quando há milhões de registros.
Chaves de dicionário: tuplas podem ser usadas como chaves de dicionário porque são imutáveis. Listas não podem. Isso vai ser importante quando você estudar dicionários.
# Data that changes over time
shopping = ['milk', 'eggs']
shopping.append('bread')
# Collections you sort or filter
scores = [85, 92, 78]
scores.sort()# Fixed data that shouldn't change
coords = (40.7128, -74.0060)
rgb_red = (255, 0, 0)
# Returning multiple values
def get_name_age():
return 'Alice', 25Por dentro: por que as tuplas são mais rápidas que as listas
Como as tuplas são imutáveis, o Python pode fazer otimizações nos bastidores. O tamanho de uma tupla é fixado na criação, então o Python a guarda em um único bloco compacto. Uma lista carrega informações extras de controle para poder crescer, e muitas vezes reserva espaço de sobra para novos itens.
List size: 52 bytes Tuple size: 40 bytes
As tuplas também aceitam todas as operações que não modificam a sequência. Você pode usar count() para contar ocorrências, index() para encontrar a posição de um valor, in para verificar se um valor está na tupla e + para concatenar.
3 2 True (1, 2, 3, 4)
Exercícios práticos
Hora de praticar! Estes exercícios cobrem a criação de tuplas, o desempacotamento e a imutabilidade.
Crie uma tupla chamada seasons contendo as quatro estações do ano como strings: 'Spring', 'Summer', 'Fall', 'Winter'.
Depois exiba a primeira e a última estação, cada uma em sua própria linha.
Saída esperada:
Spring
WinterLeia este código com atenção. O que ele vai exibir? Pense no que faz algo ser uma tupla, e não um número comum entre parênteses.
a = (5)
b = (5,)
print(type(a).__name__)
print(type(b).__name__)Escreva duas instruções print() que produzam exatamente a mesma saída.
Você recebe uma tupla que representa o registro de um aluno. Desempacote-a em três variáveis: name, age e grade.
Depois exiba cada variável em sua própria linha.
Saída esperada:
Emma
16
AEste código tenta trocar uma cor dentro de uma tupla, mas tuplas são imutáveis. Corrija-o para que o programa exiba as cores atualizadas sem alterar a tupla original. Em vez disso, crie uma nova tupla.
Saída esperada:
('red', 'yellow', 'blue')Você tem uma lista de tuplas, em que cada tupla contém o nome de um aluno e a nota dele. Percorra a lista, desempacote cada tupla e exiba o resultado de cada aluno neste formato:
Alice: 92
Bob: 85
Charlie: 78Resumo: o que você aprendeu sobre tuplas em Python
Aqui está uma recapitulação de tudo o que você já sabe sobre tuplas:
| Conceito | O que faz | Exemplo |
|---|---|---|
| Criar uma tupla | Guarda itens fixos | point = (3, 4) |
| Vírgula no final | Cria uma tupla de um item | solo = (42,) |
| Indexação | Acessa por posição | point[0], point[-1] |
| Fatiamento | Pega um pedaço | months[1:4] |
| Desempacotamento | Extrai para variáveis | x, y = point |
| Desempacotamento estendido | Captura os itens extras com * | first, *rest = items |
count() | Conta ocorrências | t.count(2) |
index() | Encontra a posição | t.index(3) |
| Imutabilidade | Não pode ser modificada depois de criada | Gera TypeError |
As tuplas são perfeitas para coleções fixas de dados: coordenadas, cores, registros e valores de retorno de funções. A imutabilidade deixa seu código mais seguro e suas intenções mais claras.
O que vem a seguir?
No próximo tutorial, Dicionários em Python, você vai aprender a guardar dados como pares de chave e valor. Em vez de acessar os itens pela posição, você vai acessá-los pelo nome.
Os dicionários são uma das estruturas de dados mais poderosas do Python. Junto com listas e tuplas, eles permitem modelar quase qualquer dado do mundo real.