12.1 - Tuplas são imutáveis
Uma tupla é uma sequência de valores. Os valores podem ser de qualquer tipo, e podem ser indexados por números inteiros, portanto, nesse sentido, as tuplas são muito parecidas com as listas. A diferença importante é que as tuplas são imutáveis.
Sintaticamente, uma tupla é uma lista de valores separados por vírgulas:
>>> t = 'a', 'b', 'c', 'd', 'e'
Embora não seja sempre necessário, é comum colocar tuplas entre parênteses:
>>> t = ('a', 'b', 'c', 'd', 'e')
Para criar uma tupla com um único elemento, é preciso incluir uma vírgula final:
>>> t1 = 'a',
>>> type(t1)
<class 'tuple'>
Um único valor entre parênteses não é uma tupla:
>>> t2 = ('a')
>>> type(t2)
<class 'str'>
Outra forma de criar uma tupla é com a função integrada tuple
. Sem argumentos, cria uma tupla vazia:
>>> t = tuple()
>>> t
()
Se os argumentos forem uma sequência (string, lista ou tupla), o resultado é uma tupla com os elementos da sequência:
>>> t = tuple('lupins')
>>> t
('l', 'u', 'p', 'i', 'n', 's')
Como tuple
é o nome de uma função integrada, você deve evitar usá-lo como nome de variável.
A maior parte dos operadores de lista também funciona em tuplas. O operador de colchetes indexa um elemento:
>>> t = ('a', 'b', 'c', 'd', 'e')
>>> t[0]
'a'
E o operador de fatia seleciona vários elementos:
>>> t[1:3]
('b', 'c')
Entretanto, se tentar alterar um dos elementos da tupla, vai receber um erro:
>>> t[0] = 'A'
TypeError: object doesn't support item assignment
Como tuplas são imutáveis, você não pode alterar os elementos, mas pode substituir uma tupla por outra:
>>> t = ('A') + t[1:]
>>> t
('A', 'b', 'c', 'd', 'e')
Essa instrução faz uma nova tupla e então a atribui a t
.
Os operadores relacionais funcionam com tuplas e outras sequências; o Python começa comparando o primeiro elemento de cada sequência. Se forem iguais, vai para os próximos elementos, e assim por diante, até que encontre elementos que sejam diferentes. Os elementos subsequentes não são considerados (mesmo se forem muito grandes).
>>> (0, 1, 2) < (0, 3, 4)
True
>>> (0, 1, 2000000) < (0, 3, 4)
True