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.

Você vai aprender
  • A criar uma tupla com parênteses e vírgulas, e a reconhecer uma pelo type().
  • A ler os itens com índices, fatias, len(), in e for, 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() e index().
  • 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).

ListaTupla
Como se escreveColchetes: ["seg", "ter"]Parênteses: ("seg", "ter")
Itens em ordem, com índiceSimSim
Pode trocar, acrescentar, remover itensSimNão
Comparação do dia a diaLista de compras a lápisCalendá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
EscritaO que fazResultado 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 diasPergunta se o item está na tuplaTrue
for dia in dias:Passa por cada item, em ordemsete 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
Boa prática: use os parênteses

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 print da 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 variável pode mudar, a tupla não

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, index devolve 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 notas continua 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')
  1. list(cores) cria uma lista nova com os mesmos itens da tupla.
  2. A lista aceita append: agora ela tem quatro cores.
  3. tuple(lista) cria uma tupla nova com os itens da lista, e a variável cores passa 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

FormaResultadoQuando 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çãoUse
Os itens vão mudar: lista de compras, tarefas do dia, carrinho da lojaLista
Os itens são fixos: dias da semana, meses, as opções de um menuTupla
Poucos valores que formam uma coisa só: coordenada, data, cor RGBTupla
Precisa ser chave de dicionárioTupla (lista não pode)

Quando dá errado

Trocar um item da tupla

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

Esquecer a vírgula da tupla de um item

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.

Índice que não existe
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].

Procurar com 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)).

Juntar tupla com texto
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

EscritaO 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 tTrue 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 * 3Nova tupla juntando / repetindo
list(t), tuple(lista)Converte tupla em lista e lista em tupla
MensagemCausa provável
TypeError: 'tuple' object does not support item assignmentTentou 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 tupleindex() 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 letrasFaltou 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:

t = (10)

2. O último dia

Com dias = ("seg", "ter", "qua", "qui", "sex", "sáb", "dom"), complete o índice negativo que mostra 'dom':

print(dias[])

3. Contando

Complete o método que conta quantas vezes o 7 aparece em notas:

print(notas.(7))

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 existem append, remove nem sort.
  • Os únicos métodos são count() e index().
  • 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.