Tuplas em Python

Tuplas podem ser vistas como coleções de campos, com um significado que depende da ordem em que esses campos aparecem.

A descrição acima é um pouco abstrata, então, como de costume, é melhor tentarmos entendê-la por meio de um exemplo.

Imagine que você precise armazenar dados de latitude e longitude de várias cidades. Algumas das opções para armazenar esses dados são:

  1. Criar duas variáveis, uma para armazenar o valor da latitude e outra para armazenar o valor da longitude.

  2. Criar uma lista de tamanho dois, onde o primeiro índice é a latitude e o segundo é a longitude.

Um problema comum às duas opções acima é que a latitude e longitude de uma cidade não muda, e ambas opções que listamos permite que esses dados sejam alterados. Idealmente, gostaríamos de atribuir os valores de latitude e longitude de uma cidade e ter certeza de que esses valores não serão alterados. Tuplas oferecem a solução perfeita nesse caso.

A seguir, explicaremos como criar a manipular tuplas em Python.

Como criar uma tupla em Python

A sintaxe de criação de tuplas é (…​, …​, …​), ou …​, …​, conforme mostrado nos exemplos abaixo.

# Exemplo de criação de tuplas.

tupla_vazia = () # Também é possível fazer: tupla_vazia = tuple()
print("Tupla vazia: ", tupla_vazia)

coordenada_xy = (10, 20)
print("Exemplo de tupla: ", coordenada_xy)

print("Tipo de uma tupla: ", type(coordenada))

latlon_bh = (-19.8157, -43.9542)
print("Outro exemplo de criação de tupla: ", latlon_bh)
Tupla vazia:  ()
Exemplo de tupla:  (10, 20)
Tipo de uma tupla:  <class 'tuple'>
Outro exemplo de criação de tupla:  (-19.8157, -43.9542)

Extraindo elementos de uma tupla

No exemplo acima, criamos uma coordenada para armazenar pontos das dimensões x e y. Podemos fazer o caminho inverso e extrair elementos individuais ("desempacotar") uma tupla:

x, y = coordenada_xy
print("x =", x)
print("y =", y)
x = 10
y = 20

Como dissemos, tuplas não podem ser modificadas. Veja o que acontece quando tentamos modificar uma tupla:

coordenada_xy[0] = 15
---------------------------------------------------------------------------

TypeError                                 Traceback (most recent call last)

<ipython-input-216-94c38671ad7b> in <module>()
----> 1 coordenada_xy[0] = 15


TypeError: 'tuple' object does not support item assignment

Um uso interessante de tuplas é a troca dos valores de duas variáveis. Essa operação é comumente conhecida como swap. Vejamos um exemplo:

x = 10
y = 20

# Swap errado.
print("x e y antes do swap: ", x, y)

x = y
y = x

print("x e y depois do swap (errado): ", x, y)
x e y antes do swap:  10 20
x e y depois do swap (errado):  20 20

Você consegue identificar o problema no código acima?

Vejamos agora formas corretas de fazer o swap do conteúdo de duas variáveis.

x = 10
y = 20

# Swap tradicional.
print("x e y antes do swap: ", x, y)

temp = x
x = y
y = temp

print("x e y depois do swap: ", x, y)


x = 10
y = 20

# Swap com tuplas.
print("x e y antes do swap: ", x, y)

x, y = y, x

print("x e y depois do swap: ", x, y)
x e y antes do swap (tradicional):  10 20
x e y depois do swap (tradicional):  20 10
x e y antes do swap (usando tuplas):  10 20
x e y depois do swap (usando tuplas):  20 10