Manipulando tuplas
Como manipular uma tupla em Python
Criando tuplas com o construtor tuple()
Além dos parênteses, também podemos criar uma tupla usando o construtor tuple():
1letras = tuple(["a", "b", "c"]) 2print(letras) 3 4# Saída: 5# ('a', 'b', 'c')
Esse formato costuma aparecer quando estamos convertendo dados, como no exemplo acima, em que convertemos do formato lista para tupla.
Lidando com a imutabilidade
Vimos que as tuplas são imutáveis, então você não pode mudar, adicionar ou remover itens diretamente dela.
Mas, na prática, existem formas indiretas de lidar com essas situações, sempre partindo da mesma ideia: converter a tupla em lista, modificar a lista e então transformá-la novamente em tupla.
Alterando valores
1tupla_de_frutas = ("maçã", "banana", "cereja") 2lista_de_frutas = list(tupla_de_frutas) 3 4lista_de_frutas[1] = "kiwi" 5tupla_de_frutas = tuple(lista_de_frutas) 6 7print(tupla_de_frutas) 8 9# Saída: 10# ('maçã', 'kiwi', 'cereja')
Adicionando itens
Convertendo para lista
1tupla_de_frutas = ("maçã", "banana", "cereja") 2lista_de_frutas = list(tupla_de_frutas) 3 4lista_de_frutas.append("laranja") 5tupla_de_frutas = tuple(lista_de_frutas) 6 7print(tupla_de_frutas) 8 9# Saída: 10# ('maçã', 'banana', 'cereja', 'laranja')
Criando uma nova tupla e somando
1primeira_tupla = ("maçã", "banana", "cereja") 2segunda_tupla = ("laranja",) 3 4primeira_tupla += segunda_tupla 5print(primeira_tupla) 6 7# Saída: 8# ('maçã', 'banana', 'cereja', 'laranja')
Lembre-se: tuplas de um único item precisam de vírgula no final para diferenciá-las de strings.
Removendo itens
Não é possível remover itens diretamente, mas podemos usar o mesmo truque de conversão para lista:
1tupla_de_frutas = ("maçã", "banana", "cereja") 2lista_de_frutas = list(tupla_de_frutas) 3 4lista_de_frutas.remove("maçã") 5tupla_de_frutas = tuple(lista_de_frutas) 6 7print(tupla_de_frutas) 8 9# Saída: 10# ('banana', 'cereja')
Limpando a tupla
1tupla = ("maçã", "banana", "cereja") 2del tupla 3 4print(tupla) # erro: a tupla não existe mais 5 6# Saída 7# Traceback (most recent call last): 8# File "<python-input-16>", line 4, in <module> 9# print(tupla) # erro: a tupla não existe mais 10# ^^^^^ 11# NameError: name 'tupla' is not defined. Did you mean: 'tuple'?
Extraindo informações da tupla
len()
Assim como nas listas, para saber quantos itens existem na tupla, usamos a função len():
1numeros = (10, 20, 30) 2print(len(numeros)) 3 4# Saída: 5# 3
count()
O método count() retorna quantas vezes um valor aparece na tupla.
1tupla = (1, 3, 7, 8, 7, 5, 4, 6, 8, 5) 2 3vezes = tupla.count(5) 4print(vezes) 5 6# Saída: 7# 2
index()
O método index() retorna a posição da primeira ocorrência de um valor dentro da tupla.
1tupla = (1, 3, 7, 8, 7, 5, 4, 6, 8, 5) 2 3posicao = tupla.index(8) 4print(posicao) 5 6# Saída: 7# 3
Se o valor não existir na tupla, o Python gera um erro.
1tupla = (1, 3, 7, 8, 7, 5, 4, 6, 8, 5) 2 3posicao = tupla.index(10) 4print(posicao) 5 6# Saída: 7# Traceback (most recent call last): 8# File "<python-input-2>", line 3, in <module> 9# posicao = tupla.index(10) 10# ^^^^^^^^^^^^^ 11# ValueError: tuple.index(x): x not in tuple
Copiando tuplas
Copiar uma tupla é muito fácil, porque tuplas nunca mudam. Pense assim:
- Uma lista é como uma caixa de brinquedos que você pode abrir e trocar os brinquedos lá dentro.
- Uma tupla é como uma caixa fechada com um visor: você olha o que tem dentro, mas nunca consegue mudar o conteúdo.
Por que isso importa?
Quando estudamos listas, vimos que copiar uma lista podia dar problema se você fizesse da seguinte forma:
1nova_lista = lista_original
Caso isso seja feito, as duas variáveis ficam apontando para a mesma caixa de brinquedos. Ou seja: se a gente mudar um brinquedo em lista_original, o mesmo item seria alterado em nova_lista porque as duas são formas diferentes de chamar a mesma caixa. Isso é perigoso porque você pode mudar sem querer algo que não queria mudar.
Com tuplas, isso não acontece porque a caixa está fechada. Se você usa o igual, as duas variáveis também apontam para a mesma caixa:
1nova_tupla = tupla_original
Mas não existe problema nenhum nisso, porque:
- Ninguém consegue abrir a caixa colada.
- Ninguém consegue trocar o que tem dentro.
- Nada pode ser alterado, nem por acidente.
Então usar a mesma caixa é totalmente seguro.
Por que é seguro?
Podemos imaginar variáveis como etiquetas coladas em caixas. No computador, essas caixas são lugares na memória. Com listas, essa caixa pode mudar por dentro (porque a lista é mutável). Com tuplas, ela nunca muda (porque a tupla é imutável).
Por isso, copiar listas exige cuidado. Mas copiar tuplas é tranquilo, já que você nunca vai alterar nada sem querer.
1primeira_tupla = ("a", "b", "c") 2segunda_tupla = primeira_tupla 3 4print(segunda_tupla) 5 6# Saída: 7# ('a', 'b', 'c')
Se quiser garantir que está criando uma nova tupla explicitamente, também pode usar a função tuple():
1tupla_original = (10, 20, 30) 2nova_tupla = tuple(tupla_original) 3 4print(nova_tupla) 5 6# Saída: 7# (10, 20, 30)
Por serem imutáveis, essas duas formas são equivalentes na prática.
Outras operações úteis
Combinando tuplas
Tuplas também podem ser unidas usando o operador + e criando uma nova tupla com todos os itens.
1primeira_tupla = ("a", "b", "c") 2segunda_tupla = (1, 2, 3) 3 4tupla_final = primeira_tupla + segunda_tupla 5print(tupla_final) 6 7# Saída: 8# ('a', 'b', 'c', 1, 2, 3)
Repetindo tuplas
Quando você usa o operador *, o Python cria uma nova tupla, colocando o conteúdo repetido várias vezes:
1frutas = ("maçã", "banana", "cereja") 2 3resultado = frutas * 2 4print(resultado) 5 6# Saída: 7# ('maçã', 'banana', 'cereja', 'maçã', 'banana', 'cereja')
Agora que você já entende como as tuplas funciona, fica bem mais claro por que elas são tão úteis.
No próximo artigo, vamos conhecer outro tipo de coleção que também tem suas próprias regras e vantagens: os conjuntos.