Resumo : neste tutorial, você aprenderá a diferença entre tupla e lista.
Tanto tupla quanto lista são tipos de sequência . No entanto, eles têm algumas diferenças principais.
1) Uma tupla é imutável enquanto uma lista é mutável
O exemplo a seguir define uma lista e modifica o primeiro elemento:
fruits = ['apple', 'orange', 'banana']
fruits[0] = 'strawberry'
print(fruits)
Linguagem de código: PHP ( php )
Saída:
['strawberry', 'orange', 'banana']
Linguagem de código: JSON/JSON com comentários ( json )
Como você pode ver claramente na saída, você pode alterar uma lista. No entanto, você não pode alterar uma tupla. O seguinte resultará em um erro:
fruits = ('apple', 'orange', 'banana')
fruits[0] = 'strawberry'
Linguagem de código: JavaScript ( javascript )
Erro:
TypeError: 'tuple' object does not support item assignment
Linguagem de código: JavaScript ( javascript )
Python não permite alterar o elemento de uma tupla. Mas você pode fazer referência a uma nova tupla. Por exemplo:
fruits = ('apple', 'orange', 'banana')
fruits = ('strawberry', 'orange', 'banana')
Linguagem de código: JavaScript ( javascript )
Neste exemplo, Python cria uma nova tupla e vincula a fruits
variável à tupla recém-criada.
Se você examinar os endereços de memória dos objetos de tupla, verá que a fruits
variável faz referência a um endereço de memória diferente após a atribuição:
fruits = ('apple', 'orange', 'banana')
print(hex(id(fruits)))
fruits = ('strawberry', 'orange', 'banana')
print(hex(id(fruits)))
Linguagem de código: PHP ( php )
Saída:
0x1c018286e00
0x1c018286e40
2) A eficiência de armazenamento de uma tupla é maior que uma lista
Uma lista é mutável. Isso significa que você pode adicionar mais elementos a ele. Por causa disso, o Python precisa alocar mais memória do que o necessário para a lista. Isso é chamado de superalocação. A superalocação melhora o desempenho quando uma lista é expandida.
Enquanto isso, uma tupla é imutável, portanto sua contagem de elementos é fixa. Portanto, o Python só precisa alocar memória suficiente para armazenar os elementos iniciais.
Como resultado, a eficiência de armazenamento de uma tupla é maior que a de uma lista.
Para obter o tamanho de um objeto, você usa a getsizeof
função do sys
módulo.
O seguinte mostra os tamanhos de uma lista e de uma tupla que armazena os mesmos elementos:
from sys import getsizeof
fruits = ['apple', 'orange', 'banana']
print(f'The size of the list is {getsizeof(fruits)} bytes.')
fruits = ('strawberry', 'orange', 'banana')
print(f'The size of the tuple is {getsizeof(fruits)} bytes.')
Linguagem de código: JavaScript ( javascript )
Saída:
The size of the list is 80 bytes.
The size of the tuple is 64 bytes.
Linguagem de código: PHP ( php )
3) Copiar uma tupla é mais rápido que uma lista
Quando você copia uma lista, o Python cria uma nova lista. O exemplo a seguir ilustra a cópia de uma lista para outra:
fruit_list = ['apple', 'orange', 'banana']
fruit_list2 = list(fruit_list)
print(id(fruit_list) == id(fruit_list2)) # False
Linguagem de código: PHP ( php )
No entanto, ao copiar uma tupla, o Python apenas reutiliza uma tupla existente. Não cria uma nova tupla porque as tuplas são imutáveis.
fruit_tuple = ('apple', 'orange', 'banana')
fruit_tuple2 = tuple(fruit_tuple)
print(id(fruit_tuple) == id(fruit_tuple2)) # True
Linguagem de código: PHP ( php )
Portanto, copiar uma tupla é sempre um pouco mais rápido que uma lista.
O seguinte compara o tempo necessário para copiar uma lista e uma tupla 1 milhão de vezes:
from timeit import timeit
times = 1_000_000
t1 = timeit("list(['apple', 'orange', 'banana'])", number=times)
print(f'Time to copy a list {times} times: {t1}')
t2 = timeit("tuple(('apple', 'orange', 'banana'))", number=times)
print(f'Time to copy a tuple {times} times: {t2}')
diff = "{:.0%}".format((t2 - t1)/t1)
print(f'difference: {diff}')
Linguagem de código: PHP ( php )
Resumo
- Uma tupla é imutável enquanto uma lista é mutável.
- A eficiência de armazenamento de uma tupla é maior que uma lista.
- Copiar uma tupla é um pouco mais rápido que uma lista.
- Use uma tupla se não pretende mutá-la.