python - tuplas - que es una tupla




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

Diferencia entre lista y tupla.

Las tuplas y las listas son tipos de secuencia aparentemente similares en Python.

  1. Sintaxis literal

    Utilizamos paréntesis ( ) para construir tuplas y corchetes [ ] para obtener una nueva lista. Además, podemos usar la llamada del tipo apropiado para obtener la estructura requerida: tupla o lista.

    someTuple = (4,6)
    someList  = [2,6] 
    
  2. Mutabilidad

    Las tuplas son inmutables, mientras que las listas son mutables. Este punto es la base para los siguientes.

  3. Uso de memoria

    Debido a la mutabilidad, necesita más memoria para las listas y menos memoria para las tuplas.

  4. Extensible

    Puede agregar un nuevo elemento tanto a las tuplas como a las listas con la única diferencia de que se cambiará la identificación de la tupla (es decir, tendremos un nuevo objeto).

  5. Hash

    Las tuplas son hashable y las listas no. Esto significa que puede usar una tupla como clave en un diccionario. La lista no se puede utilizar como clave en un diccionario, mientras que se puede usar una tupla

    tup      = (1,2)
    list_    = [1,2] 
    
    c = {tup   : 1}     # ok
    c = {list_ : 1}     # error
    
  6. Semántica

    Este punto es más sobre las mejores prácticas. Debe usar las tuplas como estructuras de datos heterogéneas, mientras que las listas son secuencias homogéneas.

¿Cual es la diferencia?

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


Además de que las tuplas son inmutables, también hay una distinción semántica que debe 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ía pares de página y número de línea para hacer referencia a ubicaciones en un libro, por ejemplo:

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

Luego puede usar esto como clave en un diccionario para almacenar notas en ubicaciones. Una lista por otro lado 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 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 iterar a través de 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 valor 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 "Entender las tuplas contra 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 de tipo estático como Haskell, los valores de 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. Así que la diferencia es muy obvia.

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


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 para 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 puedes 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 el elemento

    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
    

El PEP 484 - Sugerencias de tipo dice que los tipos de elementos de una tuple se pueden escribir individualmente; para que puedas decir Tuple[str, int, float] ; pero una list , con la clase de escritura de List , puede tomar solo un parámetro de tipo: List[str] , lo que sugiere que la diferencia de los 2 es que el primero es heterogéneo, mientras que el último es intrínsecamente homogéneo.

Además, la biblioteca estándar utiliza principalmente la tupla como un valor de retorno de tales funciones estándar en las que la C devolvería una struct .


Este es un ejemplo de las listas de Python:

my_list = [0,1,2,3,4]
top_rock_list = ["Bohemian Rhapsody","Kashmir","Sweet Emotion", "Fortunate Son"]

Este es un ejemplo de tupla de Python:

my_tuple = (a,b,c,d,e)
celebrity_tuple = ("John", "Wayne", 90210, "Actor", "Male", "Dead")

Las listas y tuplas de Python son similares en tanto que ambas son colecciones ordenadas de valores. Además de la diferencia superficial, las listas se crean con corchetes "[..., ...]" y tuplas con paréntesis "(..., ...)", la diferencia técnica entre "codificado en la sintaxis de Python" del núcleo técnico. es que los elementos de una tupla en particular son inmutables, mientras que las listas son mutables (... ¡así que solo las tuplas son hashable y se pueden usar como claves de diccionario / hash!). Esto da lugar a diferencias en la forma en que pueden o no pueden usarse (aplicada a priori por la sintaxis) y en cómo las personas eligen usarlas (alentadas como "mejores prácticas", a posteriori, esto es lo que hacen los programadores inteligentes ). La principal diferencia a posteriori en la diferenciación cuando se usan las tuplas en comparación con cuando se usan las listas radica en el significado que las personas dan al orden de los elementos.

Para las tuplas, 'orden' no significa nada más que una 'estructura' específica para mantener información. Los valores que se encuentran en el primer campo se pueden cambiar fácilmente al segundo campo, ya que cada uno proporciona valores a través de dos dimensiones o escalas diferentes. Proporcionan respuestas a diferentes tipos de preguntas y son típicamente de la forma: para un objeto / sujeto dado, ¿cuáles son sus atributos? El objeto / sujeto se mantiene constante, los atributos difieren.

Para listas, 'orden' significa una secuencia o una direccionalidad. El segundo elemento DEBE venir después del primer elemento porque se coloca en el segundo lugar según una escala o dimensión particular y común. Los elementos se toman como un todo y, en su mayoría, proporcionan respuestas a una sola pregunta, generalmente de la forma, para un atributo dado, ¿cómo se comparan estos objetos / sujetos? El atributo se mantiene constante, el objeto / sujeto difiere.

Hay innumerables ejemplos de personas en la cultura popular y programadores que no se ajustan a estas diferencias y hay innumerables personas que podrían usar un tenedor de ensalada para su plato principal. Al final del día, está bien y generalmente ambos pueden hacer el trabajo.

Para resumir algunos de los detalles más finos.

Similitudes:

  1. Duplicados : tanto las tuplas como las listas permiten duplicados
  2. Indexación, selección y corte : tanto las tuplas como las listas indexan usando valores enteros encontrados entre paréntesis. Por lo tanto, si desea los primeros 3 valores de una lista o tupla dada, la sintaxis sería la misma:

    >>> my_list[0:3]
    [0,1,2]
    >>> my_tuple[0:3]
    [a,b,c]
    
  3. Comparación y clasificación : dos tuplas o dos listas se comparan por su primer elemento, y si hay un empate, luego por el segundo elemento, y así sucesivamente. No se presta más atención a los elementos subsiguientes después de que los elementos anteriores muestran una diferencia.

    >>> [0,2,0,0,0,0]>[0,0,0,0,0,500]
    True
    >>> (0,2,0,0,0,0)>(0,0,0,0,0,500)
    True
    

Diferencias: - A priori, por definición.

  1. Sintaxis : uso de listas [], uso de tuplas ()

  2. Mutabilidad : los elementos de una lista dada son mutables, los elementos de una tupla dada NO son mutables.

    # Lists are mutable:
    >>> top_rock_list
    ['Bohemian Rhapsody', 'Kashmir', 'Sweet Emotion', 'Fortunate Son']
    >>> top_rock_list[1]
    'Kashmir'
    >>> top_rock_list[1] = "Stairway to Heaven"
    >>> top_rock_list
    ['Bohemian Rhapsody', 'Stairway to Heaven', 'Sweet Emotion', 'Fortunate Son']
    
    # Tuples are NOT mutable:       
    >>> celebrity_tuple
    ('John', 'Wayne', 90210, 'Actor', 'Male', 'Dead')
    >>> celebrity_tuple[5]
    'Dead'
    >>> celebrity_tuple[5]="Alive"
    Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    TypeError: 'tuple' object does not support item assignment
    
  3. Hashtables (diccionarios) : como las hashtables (diccionarios) requieren que sus claves sean hashables y, por lo tanto, inmutables, solo las tuplas pueden actuar como claves de diccionarios, no como listas.

    #Lists CAN'T act as keys for hashtables(dictionaries)
    >>> my_dict = {[a,b,c]:"some value"}
    Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    TypeError: unhashable type: 'list'
    
    #Tuples CAN act as keys for hashtables(dictionaries)
    >>> my_dict = {("John","Wayne"): 90210}
    >>> my_dict
    {('John', 'Wayne'): 90210}
    

Diferencias - A posteriori, en uso.

  1. Homo frente a heterogeneidad de los elementos: en general, los objetos de la lista son homogéneos y los de la tupla son heterogéneos. Es decir, las listas se usan para objetos / temas del mismo tipo (como todos los candidatos presidenciales, o todas las canciones, o todos los corredores), aunque aunque no están obligadas a hacerlo, mientras que las tuplas son más para objetos heterogéneos.

  2. Bucle contra Estructuras: aunque ambos permiten el bucle (para x en mi lista), solo tiene sentido hacerlo para una lista. Las tuplas son más apropiadas para estructurar y presentar información (% s% s que reside en% s es un% sy actualmente% s% ("John", "Wayne", 90210, "Actor", "Dead"))


La diferencia básica que he encontrado es que las listas son mutables cuando las tuplas son inmutables. Las tuplas son buenas para los cálculos en los que no es necesario cambiarlas.


La lista es mutable y las tuplas son inmutables. La principal diferencia entre mutable e inmutable es el uso de memoria cuando intenta agregar un elemento.

Cuando creas una variable, se asigna algo de memoria fija a la variable. Si es una lista, se asigna más memoria de la que realmente se usa. Por ejemplo, si la asignación de memoria actual es de 100 bytes, cuando desee agregar el 101.o byte, tal vez se asignarán otros 100 bytes (en este caso, un total de 200 bytes).

Sin embargo, si sabe que no agrega con frecuencia nuevos elementos, debe usar tuplas. Las tuplas asignan exactamente el tamaño de la memoria necesaria y, por lo tanto, ahorran memoria, especialmente cuando usas grandes bloques de memoria.


Las listas pretenden ser secuencias homogéneas, mientras que las tuplas son estructuras de datos heterogéneas.


Las listas son mutables; las tuplas no son

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

Las tuplas son inmutables y, por lo general, contienen una secuencia heterogénea de elementos a los que se accede mediante el desempaquetado (consulte más adelante en esta sección) o la indexación (o incluso por atributo en el caso de las muestras nombradas). Las listas son mutables, y sus elementos generalmente son homogéneos y se accede a ellos iterando sobre la lista.


Las listas son para bucle, 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.


Se ha mencionado que la diferencia es en gran medida semántica: la gente espera que una tupla y una lista representen información diferente. Pero esto va más allá de una pauta; Algunas bibliotecas en realidad se comportan de manera 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, si bien NumPy no forma parte de la biblioteca estándar, es una biblioteca importante de Python, y dentro de las listas NumPy y las tuplas son cosas completamente diferentes.


Si salía a caminar, podría anotar sus coordenadas en cualquier momento en una tupla (x,y) .

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

Pero no podías hacerlo al revés.





tuples