Python Tuplas
Você já conhece as listas: uma fila de valores que pode crescer, encolher e mudar. Só que alguns grupos de valores nunca deveriam mudar: os sete dias da semana, os meses do ano, a data em que a Ana nasceu, a localização da padaria no mapa. Para esses casos o Python tem a tupla (em inglês, tuple): uma sequência de valores, na ordem, que depois de criada não muda mais.
- A criar uma tupla com parênteses e vírgulas, e a reconhecer uma pelo
type(). - A ler os itens com índices, fatias,
len(),inefor, igual às listas. - O detalhe que pega todo mundo: a tupla de um item só precisa de vírgula,
(5,). - Por que a tupla não muda, e as mensagens reais do Python quando você tenta mudar.
- Os dois métodos da tupla,
count()eindex(). - A converter tupla em lista e lista em tupla, e quando usar cada uma.
A ideia: uma lista escrita a caneta
Pense na lista de compras da Ana, escrita a lápis: ela apaga um item, acrescenta outro, troca a ordem. Isso é uma lista do Python. Agora pense no calendário pendurado na cozinha, impresso: os dias da semana estão lá, sempre os mesmos sete, sempre na mesma ordem. Ninguém apaga a "quarta-feira". Isso é uma tupla.
As duas guardam vários valores em ordem e você lê os itens do mesmo jeito. A diferença é só uma: a lista pode ser alterada, a tupla não. Em Python se diz que a lista é mutável (pode mudar) e a tupla é imutável (não pode mudar).
| Lista | Tupla | |
|---|---|---|
| Como se escreve | Colchetes: ["seg", "ter"] | Parênteses: ("seg", "ter") |
| Itens em ordem, com índice | Sim | Sim |
| Pode trocar, acrescentar, remover itens | Sim | Não |
| Comparação do dia a dia | Lista de compras a lápis | Calendário impresso |
1. Criando uma tupla
dias = ("seg", "ter", "qua", "qui", "sex", "sáb", "dom")
print(dias)
print(type(dias))
print(len(dias))
- dias
- O nome da variável que vai guardar a tupla.
- ( … )
- Os parênteses envolvem os itens. Na lista são colchetes; na tupla, parênteses.
- "seg", "ter", …
- Os itens, separados por vírgula. Podem ser de qualquer tipo: textos, números, até outras tuplas.
- type(dias)
- Mostra o tipo do valor (aula Descobrindo o Tipo). Para uma tupla, o tipo se chama
tuple. - len(dias)
- Quantos itens a tupla tem.
$ python3 dias.py
('seg', 'ter', 'qua', 'qui', 'sex', 'sáb', 'dom')
<class 'tuple'>
7
Repare que o print mostra a tupla com parênteses e com aspas simples, mesmo que você tenha escrito aspas duplas. É só o jeito de o Python mostrar textos dentro de uma tupla ou lista; o valor é o mesmo.
2. Lendo os itens: igual à lista
Tudo o que serve para ler uma lista serve para ler uma tupla: índice começando do zero, índice negativo contando do fim, fatias, in e o laço for.
dias = ("seg", "ter", "qua", "qui", "sex", "sáb", "dom")
print(dias[0])
print(dias[-1])
print(dias[1:5])
print("sáb" in dias)
for dia in dias:
print("Hoje é", dia)
$ python3 acessar.py
seg
dom
('ter', 'qua', 'qui', 'sex')
True
Hoje é seg
Hoje é ter
Hoje é qua
Hoje é qui
Hoje é sex
Hoje é sáb
Hoje é dom
| Escrita | O que faz | Resultado aqui |
|---|---|---|
dias[0] | O primeiro item (o índice começa em 0) | 'seg' |
dias[-1] | O último item | 'dom' |
dias[1:5] | Uma fatia: do índice 1 até antes do 5. A fatia de uma tupla também é uma tupla | ('ter', 'qua', 'qui', 'sex') |
"sáb" in dias | Pergunta se o item está na tupla | True |
for dia in dias: | Passa por cada item, em ordem | sete linhas |
Se índices e fatias ainda são novidade, a aula Acessando Itens explica cada um com calma: lá é com listas, mas funciona igualzinho.
3. Tuplas guardam coisas que andam juntas
O uso mais comum da tupla não é guardar uma fila comprida de coisas iguais, e sim juntar poucos valores que formam uma coisa só: a latitude e a longitude de um lugar, o dia, o mês e o ano de uma data.
padaria = (-5.0892, -42.8019)
print("Latitude:", padaria[0])
print("Longitude:", padaria[1])
aniversario = (12, 3, 1990)
print(f"Nasci em {aniversario[0]}/{aniversario[1]}/{aniversario[2]}")
$ python3 coordenada.py Latitude: -5.0892 Longitude: -42.8019 Nasci em 12/3/1990
Uma coordenada sempre tem dois números; uma data, três. Não faz sentido "acrescentar um item" a uma data. A tupla deixa isso claro para quem lê o código: esses valores andam juntos e ficam como estão. Na próxima aula, Desempacotamento, você vai ver um jeito mais bonito de tirar cada valor da tupla em vez de usar [0], [1], [2].
4. A tupla de um item só: a vírgula é que manda
Aqui está a pegadinha mais famosa das tuplas. Quem faz a tupla não são os parênteses, é a vírgula. Os parênteses também servem para outra coisa em Python: agrupar contas, como em (2 + 3) * 4. Então, quando há um item só, o Python precisa de uma pista para saber que você quer uma tupla.
sem_virgula = ("arroz")
com_virgula = ("arroz",)
print(sem_virgula, type(sem_virgula))
print(com_virgula, type(com_virgula))
numero = (5)
tupla = (5,)
print(numero, type(numero))
print(tupla, type(tupla))
$ python3 um_item.py
arroz <class 'str'>
('arroz',) <class 'tuple'>
5 <class 'int'>
(5,) <class 'tuple'>
- ("arroz")
- Parênteses em volta de um texto, só isso. O Python trata como se fosse
"arroz"sozinho: o tipo éstr(texto). - ("arroz",)
- Com a vírgula depois do item, agora sim é uma tupla de um item. O próprio Python, ao mostrar, escreve a vírgula:
('arroz',). - (5)
- É só o número 5 entre parênteses, como numa conta: tipo
int. - (5,)
- Uma tupla com um item, o número 5.
No modo interativo dá para ver isso rapidinho. Cada linha com >>> é o que a Ana digitou; a linha de baixo é a resposta do Python:
$ python3 Python 3.14.4 (main, Aug 20 2026, 10:41:58) [GCC 15.2.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>> (5) 5 >>> (5,) (5,) >>> type((5,)) <class 'tuple'> >>> 5, (5,) >>> exit()
A última linha mostra que, com a vírgula, nem os parênteses são necessários: 5, já é uma tupla.
Missão: a Ana queria uma tupla com uma fruta só, mas o programa mostra <class 'str'>. Conserte a primeira linha para que frutas seja uma tupla.
frutas = ("manga")
print(frutas, type(frutas))
frutas = ("manga",)
print(frutas, type(frutas))
5. Sem parênteses e vazia
Como é a vírgula que faz a tupla, você pode criar uma sem parênteses nenhum. E para uma tupla vazia, sem itens, há duas formas: () ou tuple().
ponto = 3, 4 print(ponto) print(type(ponto)) um = "café", print(um) vazia = () tambem_vazia = tuple() print(vazia, len(vazia)) print(tambem_vazia, len(tambem_vazia))
$ python3 sem_parenteses.py
(3, 4)
<class 'tuple'>
('café',)
() 0
() 0
Funcionar sem parênteses funciona, mas um = "café", é fácil de não ver: aquela vírgula no fim parece um erro de digitação. Escreva um = ("café",): quem ler o seu código entende na hora que é uma tupla. Sem parênteses, a tupla aparece mais em return a, b e na troca a, b = b, a, que você vai ver em Desempacotamento.
6. A tupla não muda
Agora a característica principal. A Ana resolve escrever o nome completo do primeiro dia e tenta trocar o item, como faria numa lista:
dias = ("seg", "ter", "qua", "qui", "sex", "sáb", "dom")
dias[0] = "segunda"
print(dias)
$ python3 mudar.py
Traceback (most recent call last):
File "/home/ana/mudar.py", line 2, in <module>
dias[0] = "segunda"
~~~~^^^
TypeError: 'tuple' object does not support item assignment
É a primeira vez que este erro aparece no guia; vamos ler linha por linha:
- Traceback (most recent call last):
- "Rastro (a chamada mais recente por último)". O Python avisa que deu erro e vai mostrar onde.
- File "/home/ana/mudar.py", line 2, in <module>
- O erro está no arquivo
mudar.py, na linha 2, no corpo principal do programa (<module>). - dias[0] = "segunda"
- A linha que deu problema.
- ~~~~^^^
- Os tils e acentos circunflexos apontam o pedaço exato:
dias[0], o lugar onde você tentou guardar um valor. - TypeError: 'tuple' object does not support item assignment
- "Erro de tipo: um objeto do tipo tupla não aceita atribuição de item". Em português claro: você não pode trocar um item de uma tupla. O
printda linha 3 nem chegou a rodar: o programa parou no erro.
Pela mesma razão, a tupla não tem append(), remove(), sort() nem nenhum outro método que mude a lista no lugar. Se você tentar:
dias = ("seg", "ter", "qua")
dias.append("qui")
$ python3 append.py
Traceback (most recent call last):
File "/home/ana/append.py", line 2, in <module>
dias.append("qui")
^^^^^^^^^^^
AttributeError: 'tuple' object has no attribute 'append'
AttributeError quer dizer "erro de atributo": a tupla não tem nada chamado append. Não é que o append falhou; ele nem existe para tuplas.
Então para que serve algo que não muda?
- Segurança: se um valor não deveria mudar (os dias da semana, uma data), guardá-lo numa tupla impede que um pedaço do programa o altere por engano. Se alguém tentar, o Python reclama na hora, em vez de deixar o erro escondido.
- Clareza: quem lê
(12, 3, 1990)entende que é um registro fixo, não uma fila que vai crescer. - Chave de dicionário: só valores que não mudam podem ser chave de um dicionário. Uma tupla pode; uma lista não. Você vai ver isso em Dicionários.
A tupla não muda, mas a variável pode passar a guardar outra tupla: dias = ("segunda", "terça") funciona. Você não alterou a tupla antiga; jogou ela fora e colocou uma nova no lugar. A diferença entre mudar o valor e trocar o valor da variável é o assunto da aula Mutável × Imutável.
7. Os dois métodos da tupla: count() e index()
Como a tupla não muda, sobram só dois métodos, os dois de consulta. E as funções que só leem (min, max, sum, sorted) funcionam normalmente.
notas = (7, 9, 7, 10, 7, 8) print(notas.count(7)) print(notas.index(10)) print(notas.index(7)) print(min(notas), max(notas), sum(notas)) print(sorted(notas))
$ python3 metodos.py 3 3 0 7 10 48 [7, 7, 7, 8, 9, 10]
- notas.count(7)
- "Contar": quantas vezes o 7 aparece. Três vezes.
- notas.index(10)
- "Índice": em que posição está o 10. Na posição 3 (lembre: começa do 0).
- notas.index(7)
- Quando o item aparece mais de uma vez,
indexdevolve a posição da primeira vez: 0. - min, max, sum
- Menor, maior e soma. Funcionam com tuplas porque só leem os itens.
- sorted(notas)
- Devolve os itens em ordem, mas numa lista nova (repare nos colchetes). A tupla
notascontinua como estava.
8. Convertendo: tupla ⇄ lista
E se você realmente precisar mudar? Converta a tupla em lista com list(), mude a lista, e converta de volta com tuple():
cores = ("vermelho", "verde", "azul")
lista = list(cores)
lista.append("amarelo")
cores = tuple(lista)
print(cores)
$ python3 converter.py
('vermelho', 'verde', 'azul', 'amarelo')
list(cores)cria uma lista nova com os mesmos itens da tupla.- A lista aceita
append: agora ela tem quatro cores. tuple(lista)cria uma tupla nova com os itens da lista, e a variávelcorespassa a guardá-la.
Outro jeito de "aumentar" uma tupla é juntar duas com +. O resultado é uma tupla nova; as originais ficam como estavam. O * repete:
manha = ("café", "pão")
tarde = ("bolo",)
lanches = manha + tarde
print(lanches)
print(manha)
print(("oi",) * 3)
$ python3 juntar.py
('café', 'pão', 'bolo')
('café', 'pão')
('oi', 'oi', 'oi')
Missão: o programa quer trocar "seg" por "segunda", mas dá TypeError. Sem mudar a primeira linha, conserte: converta a tupla em lista, troque o item e converta de volta.
dias = ("seg", "ter", "qua")
dias[0] = "segunda"
print(dias)
dias = ("seg", "ter", "qua")
lista = list(dias)
lista[0] = "segunda"
dias = tuple(lista)
print(dias)
Formas diferentes de criar a mesma tupla
| Forma | Resultado | Quando usar |
|---|---|---|
("seg", "ter") | ('seg', 'ter') | Quase sempre. É a forma mais clara |
"seg", "ter" | ('seg', 'ter') | Em return a, b e em trocas a, b = b, a; no resto, prefira os parênteses |
tuple(["seg", "ter"]) | ('seg', 'ter') | Quando os itens já estão em outra coisa (uma lista, um texto) e você quer congelá-los |
("seg",) | ('seg',) | Tupla de um item: a vírgula é obrigatória |
() ou tuple() | () | Tupla vazia; as duas formas valem o mesmo |
Lista ou tupla?
| Situação | Use |
|---|---|
| Os itens vão mudar: lista de compras, tarefas do dia, carrinho da loja | Lista |
| Os itens são fixos: dias da semana, meses, as opções de um menu | Tupla |
| Poucos valores que formam uma coisa só: coordenada, data, cor RGB | Tupla |
| Precisa ser chave de dicionário | Tupla (lista não pode) |
Quando dá errado
Já visto acima: dias[0] = "segunda" dá TypeError: 'tuple' object does not support item assignment. Como consertar: se os itens precisam mudar, use uma lista desde o começo. Se a mudança é rara, converta com list(), mude e volte com tuple().
A Ana queria uma tupla com um item só e passar por ela num for:
compras = ("arroz")
print(len(compras))
for item in compras:
print(item)
$ python3 len_int.py 5 a r r o z
Nenhum erro, mas o resultado está errado: o tamanho deu 5 e o for passou letra por letra. Sem a vírgula, compras é o texto "arroz", e o texto tem 5 letras. Esse é o tipo de erro mais traiçoeiro: o programa roda e entrega uma coisa errada. Como consertar: compras = ("arroz",). Na dúvida, um print(type(compras)) tira a dúvida.
dias = ("seg", "ter", "qua", "qui", "sex", "sáb", "dom")
print(dias[7])
$ python3 fora.py
Traceback (most recent call last):
File "/home/ana/fora.py", line 2, in <module>
print(dias[7])
~~~~^^^
IndexError: tuple index out of range
IndexError: tuple index out of range: "erro de índice: índice da tupla fora do intervalo". São 7 dias, então os índices vão de 0 a 6; o 7 não existe. Como consertar: o último item é dias[6], ou, sem fazer conta, dias[-1].
index() um item que não está lá
notas = (7, 9, 7, 10, 7, 8) print(notas.index(5))
$ python3 index_erro.py
Traceback (most recent call last):
File "/home/ana/index_erro.py", line 2, in <module>
print(notas.index(5))
~~~~~~~~~~~^^^
ValueError: tuple.index(x): x not in tuple
ValueError: tuple.index(x): x not in tuple: "erro de valor: o x procurado não está na tupla". Ninguém tirou 5. Como consertar: pergunte antes com in: if 5 in notas: print(notas.index(5)).
manha = ("café", "pão")
lanches = manha + "bolo"
$ python3 juntar_erro.py
Traceback (most recent call last):
File "/home/ana/juntar_erro.py", line 2, in <module>
lanches = manha + "bolo"
~~~~~~^~~~~~~~
TypeError: can only concatenate tuple (not "str") to tuple
"Só dá para concatenar (juntar) tupla com tupla, não com str". O + só junta duas tuplas. Como consertar: transforme o item numa tupla de um item: manha + ("bolo",).
Referência rápida
| Escrita | O que faz |
|---|---|
t = (1, 2, 3) | Cria uma tupla |
t = (1,) | Tupla de um item (a vírgula é obrigatória) |
t = () / tuple() | Tupla vazia |
t[0], t[-1], t[1:3] | Item, último item, fatia (uma tupla nova) |
len(t) | Quantos itens |
x in t | True se x está na tupla |
t.count(x) | Quantas vezes x aparece |
t.index(x) | Posição da primeira vez que x aparece (ValueError se não estiver) |
t1 + t2, t * 3 | Nova tupla juntando / repetindo |
list(t), tuple(lista) | Converte tupla em lista e lista em tupla |
| Mensagem | Causa provável |
|---|---|
TypeError: 'tuple' object does not support item assignment | Tentou trocar um item: a tupla não muda |
AttributeError: 'tuple' object has no attribute 'append' | Tupla não tem append, remove, sort… |
IndexError: tuple index out of range | Índice maior que o último |
ValueError: tuple.index(x): x not in tuple | index() de um item que não está na tupla |
TypeError: can only concatenate tuple (not "str") to tuple | + entre tupla e outra coisa |
Sem erro, mas len conta letras | Faltou a vírgula: ("arroz") é texto, não tupla |
Exercícios
1. A tupla de um item
Complete para que t seja uma tupla com um item, o número 10:
2. O último dia
Com dias = ("seg", "ter", "qua", "qui", "sex", "sáb", "dom"), complete o índice negativo que mostra 'dom':
3. Contando
Complete o método que conta quantas vezes o 7 aparece em notas:
4. O que print(type(("pão"))) mostra?
5. Qual destas operações dá erro numa tupla t = (1, 2, 3)?
6. Para guardar a data de nascimento de uma pessoa (dia, mês e ano), o mais adequado é:
Missão final: o boletim do bimestre
Missão: as notas do bimestre da Ana estão numa tupla. Troque cada ? pelo que falta, usando o que você aprendeu: quantas vezes ela tirou 10, a maior nota e a primeira nota.
notas = (8, 10, 6, 10, 9)
print("Notas 10:", "?")
print("Maior nota:", "?")
print("Primeira nota:", "?")
notas = (8, 10, 6, 10, 9)
print("Notas 10:", notas.count(10))
print("Maior nota:", max(notas))
print("Primeira nota:", notas[0])
Resumo
- A tupla é uma sequência em ordem, escrita com parênteses:
("seg", "ter"). O tipo dela étuple. - Lê-se igual à lista:
t[0],t[-1], fatias,len,in,for. - Quem faz a tupla é a vírgula:
(5)é o número 5;(5,)é uma tupla. - A tupla é imutável: trocar um item dá
TypeError, e não existemappend,removenemsort. - Os únicos métodos são
count()eindex(). - Para mudar, converta:
list(t), mude,tuple(lista). Ou junte com+, que cria uma tupla nova. - Use tupla para valores fixos ou que formam uma coisa só (data, coordenada); use lista para o que vai mudar.