Listas vs Tuplas en Python

Las listas y las tuplas son dos de las estructuras de datos más utilizadas en Python, siendo el diccionario la tercera. Las listas y las tuplas tienen muchas similitudes: son...

Introducción

Las listas y las tuplas son dos de las estructuras de datos más utilizadas en Python, siendo el diccionario la tercera. Las listas y las tuplas tienen muchas similitudes:

  • Ambos son tipos de datos de secuencia que almacenan una colección de elementos.
  • Pueden almacenar elementos de cualquier tipo de datos
  • Y se puede acceder a cualquier elemento a través de su índice.

Entonces, la pregunta que estamos tratando de responder aquí es, ¿en qué se diferencian? Y si no hay diferencia entre los dos, ¿por qué deberíamos tener los dos? ¿No podemos tener listas o tuplas?

En este artículo, mostraremos cómo las listas y las tuplas difieren entre sí.

Diferencia de sintaxis

En Python, las listas y las tuplas se declaran de diferentes formas. Se crea una lista usando corchetes [] mientras que la tupla se crea usando paréntesis ():

1
2
3
4
tuple_names = ('Nicholas', 'Michelle', 'Alex')
list_names = ['Nicholas', 'Michelle', 'Alex']
print(tuple_names)
print(list_names)

Esto dará como resultado:

1
2
('Nicholas', 'Michelle', 'Alex')
['Nicholas', 'Michelle', 'Alex']

Definimos una tupla llamada tuple_names y una lista llamada list_names. En la definición de tupla, usamos paréntesis () mientras que en la definición de lista usamos corchetes [].

El método type() de Python ayuda a identificar fácilmente el tipo de un objeto:

1
2
print(type(tuple_names)) # <class 'tuple'>
print(type(list_names)) # <class 'list'>

Mutable vs Inmutable

Las listas son mutables mientras que las tuplas son inmutables, y esto marca la diferencia clave entre las dos. ¿Qué significa esto?

Podemos cambiar/modificar los valores de una lista pero no podemos cambiar/modificar los valores de una tupla.

Dado que las listas son mutables, no podemos usar una lista como clave en un diccionario. Esto se debe a que solo un objeto inmutable puede usarse como clave en un diccionario. Por lo tanto, podemos usar tuplas como claves de diccionario si es necesario.

Echemos un vistazo a un ejemplo que demuestra la diferencia entre listas y tuplas en términos de inmutabilidad. Vamos a crear una lista de diferentes nombres:

1
names = ["Nicholas", "Michelle", "Alex"]

Veamos qué sucederá si intentamos cambiar el primer elemento de la lista de Nicholas a Samuel:

1
names[0] = "Samuel"

{.icon aria-hidden=“true”}

Nota: El primer elemento está en el índice 0.

Ahora, mostremos el contenido de la lista:

1
print(names)

Esto imprimirá la lista actualizada:

1
['Samuel', 'Michelle', 'Alex']

¿Qué pasa si intentamos hacer lo mismo con una tupla? Primero, vamos a crear una tupla:

1
 names = ("Nicholas", "Michelle", "Alex")

Intentemos ahora cambiar el primer elemento de la tupla de Nicholas a Samuel:

1
names[0] = "Samuel"

Esto resultará en el siguiente error:

1
2
3
4
Traceback (most recent call last):
  File "<pyshell#7>", line 1, in <module>
    names[0] = "Samuel"
TypeError: 'tuple' object does not support item assignment

Recibimos un error de que un objeto de tupla no admite la asignación de elementos. La razón es que un objeto de tupla no se puede cambiar después de haberlo creado.

Reutilizado frente a copiado

Tuplas no se pueden copiar. La razón es que las tuplas son inmutables. Si ejecuta tuple(tuple_name), se devolverá inmediatamente:

1
2
3
names = ('Nicholas', 'Michelle', 'Alex')
copy_names = tuple(names)
print(names is copy_names)

Los dos son iguales:

1
True

Por el contrario, list(list_name) requiere copiar todos los datos a una nueva lista:

1
2
3
names = ['Nicholas', 'Michelle', 'Alex']
copy_names = list(names)
print(names is copy_names)

Dado que names y copy_names no son lo mismo, el resultado es Falso:

1
False

A continuación, analicemos cómo la lista y la tupla difieren en términos de tamaño.

Diferencia de tamaño

Python asigna bloques de memoria más grandes con una sobrecarga baja a tuplas porque son inmutables. Por otro lado, para listas, Pythons asigna pequeños bloques de memoria. Al final, la tupla tendrá una memoria más pequeña en comparación con la lista. Esto hace que las tuplas aprovechen un poco más el espacio en comparación con las listas cuando tiene una gran cantidad de elementos.

Por ejemplo, creemos una lista y una tupla que contenga los mismos elementos y comparemos los tamaños de los dos:

1
2
3
4
tuple_names = ('Nicholas', 'Michelle', 'Alex')
list_names = ['Nicholas', 'Michelle', 'Alex']
print(tuple_names.__sizeof__())
print(list_names.__sizeof__())

El resultado muestra que la lista tiene un tamaño mayor que la tupla:

1
2
48
64

{.icon aria-hidden=“true”}

Nota: El tamaño que se muestra es en términos de bytes.

Homogéneo frente a heterogéneo {#homogéneo frente a heterogéneo}

Las tuplas se utilizan normalmente para almacenar elementos heterogéneos, que son elementos que pertenecen a diferentes tipos de datos. Las listas, por otro lado, se utilizan típicamente para almacenar elementos homogéneos, que son elementos que pertenecen al mismo tipo.

{.icon aria-hidden=“true”}

Nota: Esto es solo una diferencia semántica. Ambos tipos de datos son heterogéneos, pero la convención difiere. También puede almacenar elementos del mismo tipo en una tupla y elementos de diferentes tipos en una lista.

El siguiente código se ejecutará sin errores a pesar de que la lista tiene una combinación de cadenas y un número:

1
2
list_elements = ['Nicholas', 10, 'Alex']
tuple_elements = ('Nicholas', "Michelle", 'Alex')

Longitud variable frente a longitud fija

Las tuplas tienen una longitud fija mientras que las listas tienen una longitud variable. Esto significa que podemos cambiar el tamaño de una lista creada pero no podemos cambiar el tamaño de una tupla existente:

1
2
3
list_names = ['Nicholas', 'Michelle', 'Alex']
list_names.append("Mercy")
print(list_names)

El resultado muestra que se ha agregado un cuarto nombre a la lista:

1
['Nicholas', 'Michelle', 'Alex', 'Mercy']

Hemos usado el método append() de Python para esto. Podríamos haber logrado lo mismo a través del método insert():

1
2
3
list_names = ['Nicholas', 'Michelle', 'Alex']
list_names.insert(3, "Mercy")
print(list_names)

El resultado nuevamente muestra que se ha agregado un cuarto elemento a la lista:

1
['Nicholas', 'Michelle', 'Alex', 'Mercy']

Una tupla de Python no nos proporciona una forma de cambiar su tamaño.

Conclusión

Podemos concluir que aunque tanto las listas como las tuplas son estructuras de datos en Python, existen diferencias notables entre las dos, siendo la principal diferencia que las listas son mutables mientras que las tuplas son inmutables. Una lista tiene un tamaño variable mientras que una tupla tiene un tamaño fijo. Las operaciones en tuplas se pueden ejecutar más rápido en comparación con las operaciones en listas.

Licensed under CC BY-NC-SA 4.0