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


¿Cual es la diferencia?

¿Cuáles son las ventajas / desventajas de las tuplas / listas?


844
2018-03-09 15:41


origen


Respuestas:


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 diferentes significados), 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 los pares de páginas y números de línea para las ubicaciones de referencia en un libro, por ejemplo:

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

A continuación, puede utilizar esto como una clave en un diccionario para almacenar notas en las ubicaciones. Por otro lado, una lista podría usarse para almacenar múltiples ubicaciones. Naturalmente, uno podría querer 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 que las tuplas son inmutables.

Puede haber situaciones en las que desee cambiar elementos dentro de una tupla de ubicación existente, por ejemplo, al recorrer las líneas de una página. Pero la inmutabilidad de la tupla te obliga a crear una nueva tupla de ubicación para cada nuevo valor. Esto parece inconveniente a primera vista, pero el uso de datos inmutables como este es una 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, p. "Las tuplas de Python no son solo listas constantes" o "Comprender las tuplas frente a las listas en Python". La documentación oficial de Python también menciona esto

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

En un lenguaje estáticamente tipado como Haskell los valores en una tupla generalmente tienen diferentes tipos 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á el namedtuple en Python, lo cual tiene sentido porque una tupla ya debe tener estructura. Esto subraya la idea de que las tuplas son una alternativa ligera a clases e instancias.


881
2018-03-09 16:02



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ápido, pero no mucho que mencionar hasta que tenga 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 puede eliminar un elemento u ordenar una tupla. Sin embargo, puede agregar un nuevo elemento tanto a la lista como a la tupla, con la única diferencia de que cambiará la identificación de la tupla agregando elementos.

    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 una tupla se puede usar.

    a    = (1,2)
    b    = [1,2] 
    
    c = {a: 1}     # OK
    c = {b: 1}     # Error
    

298
2017-09-19 11:07



Si saliste a caminar, podrías observar tus coordenadas en cualquier momento en un (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.


176
2018-03-09 17:14



La diferencia clave es que las tuplas son inmutables. Esto significa que no puede cambiar los valores en una tupla una vez que la haya creado.

Entonces, si vas a necesitar cambiar los valores usa una lista.

Beneficios para las tuplas:

  1. Leve mejora del rendimiento.
  2. Como una tupla es inmutable, puede usarse como clave en un diccionario.
  3. Si no puede cambiarlo tampoco lo puede hacer cualquier otra persona, lo que quiere decir que no necesita preocuparse por ninguna función API, etc. cambiando su tupla sin que se lo pidan.

69
2018-03-09 15:42



Las listas son mutables; las tuplas no lo son

De docs.python.org/2/tutorial/datastructures.html 

Las tuplas son inmutables, y generalmente contienen una secuencia heterogénea de   elementos a los que se accede mediante el desembalaje (ver más adelante en esta sección)   o indización (o incluso por atributo en el caso de tics con nombre). Liza   son mutables, y sus elementos son generalmente homogéneos y   se accede iterando sobre la lista.


30
2018-03-09 15:41



Las listas son para bucles, las tuplas son para estructuras, es decir "%s %s" %tuple.

Las listas suelen ser homogéneas, las tuplas suelen ser heterogéneas.

Las listas son para longitud variable, las tuplas son para longitud fija.


18
2018-04-19 05:43



Sus sido mencionado que la diferencia es en gran medida semántica: las personas esperan una tupla y una lista para representar información diferente. Pero esto va más allá de una pauta; algunas bibliotecas realmente se comportan de forma diferente en función de lo que se pasan. Tome NumPy por ejemplo (copiado de otra publicación donde pido más ejemplos):

>>> import numpy as np
>>> a = np.arange(9).reshape(3,3)
>>> a
array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])
>>> idx = (1,1)
>>> a[idx]
4
>>> idx = [1,1]
>>> a[idx]
array([[3, 4, 5],
       [3, 4, 5]])

El punto es que, aunque NumPy puede no ser parte de la biblioteca estándar, es una mayor La biblioteca de Python, y dentro de las listas y tuplas de NumPy son cosas completamente diferentes.


17
2017-08-12 07:06