Tupla Python vs. Lista

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 assignmentLinguagem 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 fruitsvariável à tupla recém-criada.

Se você examinar os endereços de memória dos objetos de tupla, verá que a fruitsvariá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 getsizeoffunção do sysmó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))  # TrueLinguagem 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.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *