¿Cuál es la diferencia entre listas y tuplas?

Resuelto Lucas Gabriel Sánchez asked hace 15 años • 22 respuestas

¿Cuál es la diferencia entre tuplas/listas y cuáles son sus ventajas/desventajas?

Lucas Gabriel Sánchez avatar Mar 09 '09 22:03 Lucas Gabriel Sánchez
Aceptado

Además de que las tuplas son inmutables, también existe una distinción semántica que debería guiar su uso. Las tuplas son estructuras de datos heterogéneas (es decir, sus entradas tienen significados diferentes), mientras que las listas son secuencias homogéneas. Las tuplas tienen estructura, las listas tienen orden.

El uso de esta distinción hace que el código sea más explícito y comprensible.

Un ejemplo serían pares de números de página y de línea para hacer referencia a ubicaciones en un libro, por ejemplo:

my_location = (42, 11)  # page number, line number

Luego puedes usar esto como clave en un diccionario para almacenar notas sobre ubicaciones. Por otro lado, una lista podría usarse para almacenar múltiples ubicaciones. Naturalmente, es posible que desee agregar o eliminar ubicaciones de la lista, por lo que tiene sentido que las listas sean mutables. Por otro lado, no tiene sentido agregar o eliminar elementos de una ubicación existente; por lo tanto, las tuplas son inmutables.

Puede haber situaciones en las que desee cambiar elementos dentro de una tupla de ubicación existente, por ejemplo, al iterar a través de las líneas de una página. Pero la inmutabilidad de tuplas te obliga a crear una nueva tupla de ubicación para cada nuevo valor. A primera vista, esto parece inconveniente, pero el uso de datos inmutables como este es la piedra angular de los tipos de valores y las técnicas de programación funcional, que pueden tener ventajas sustanciales.

Hay algunos artículos interesantes sobre este tema, por ejemplo, "Las tuplas de Python no son solo listas constantes" o "Comprensión de las tuplas y las listas en Python" . La documentación oficial de Python también menciona esto.

"Las tuplas son inmutables y normalmente contienen una secuencia heterogénea ...".

En un lenguaje de tipo estático como Haskell, los valores de una tupla generalmente tienen tipos diferentes y la longitud de la tupla debe ser fija. En una lista, todos los valores tienen el mismo tipo y la longitud no es fija. Entonces la diferencia es muy obvia.

Finalmente está la tupla con nombre en Python, lo cual tiene sentido porque se supone que una tupla ya tiene estructura. Esto subraya la idea de que las tuplas son una alternativa ligera a las clases e instancias.

nikow avatar Mar 09 '2009 16:03 nikow

Diferencia entre lista y tupla

  1. Literal

    someTuple = (1,2)
    someList  = [1,2] 
    
  2. Tamaño

    a = tuple(range(1000))
    b = list(range(1000))
    
    a.__sizeof__() # 8024
    b.__sizeof__() # 9088
    

    Debido al tamaño más pequeño de una operación de tupla, se vuelve un poco más rápida, pero no hay mucho que mencionar hasta que tengas una gran cantidad de elementos.

  3. Operaciones permitidas

    b    = [1,2]   
    b[0] = 3       # [3, 2]
    
    a    = (1,2)
    a[0] = 3       # Error
    

    Eso también significa que no puedes eliminar un elemento ni ordenar una tupla. Sin embargo, podría agregar un nuevo elemento tanto a la lista como a la tupla con la única diferencia de que, dado que la tupla es inmutable, en realidad no está agregando un elemento sino que está creando una nueva tupla, por lo que la identificación cambiará.

    a     = (1,2)
    b     = [1,2]  
    
    id(a)          # 140230916716520
    id(b)          # 748527696
    
    a   += (3,)    # (1, 2, 3)
    b   += [3]     # [1, 2, 3]
    
    id(a)          # 140230916878160
    id(b)          # 748527696
    
  4. Uso

    Como una lista es mutable, no se puede usar como clave en un diccionario, mientras que se puede usar una tupla.

    a    = (1,2)
    b    = [1,2] 
    
    c = {a: 1}     # OK
    c = {b: 1}     # Error
    
Nikita avatar Sep 19 '2013 11:09 Nikita

Si salieras a caminar, podrías anotar tus coordenadas en cualquier instante en una (x,y)tupla.

Si desea registrar su viaje, puede agregar su ubicación cada pocos segundos a una lista.

Pero no podrías hacerlo al revés.

dan-gph avatar Mar 09 '2009 17:03 dan-gph