En Python, un tupla es un tipo de datos estrechamente relacionado con la lista, un tipo de datos secuenciales muy flexible que puede acomodar una secuencia de elementos arbitrariamente larga.
A diferencia de la lista, la tupla es inmutable, lo que abre la posibilidad de calcular valores hash para tuplas. Esta propiedad es importante para el uso de tuplas en combinación con tipos de datos como el diccionario o el conjunto, que se basan en tablas hash. Basado en la condición de que los valores hash también se puedan calcular para todos los elementos de una tupla, por lo tanto, se puede usar como una clave en un diccionario o como un elemento en un conjunto, lo que lo diferencia de una lista.
El concepto de tupla está relacionado con el de lista, pero debido a su inmutabilidad, solo está disponible el conjunto básico de operaciones para tipos de datos secuenciales. tupla instancias.
Para crear nuevo tupla instancias, debe utilizar los paréntesis, que, al igual que las listas, contienen los elementos de la tupla, separados por comas:
>>> a = (1, 2, 3, 4, 5)
>>> a[3]
4
Una tupla vacía se define mediante dos paréntesis () sin contenido Un caso especial involucra tuplas con un solo elemento. Si intenta crear una tupla con un solo elemento de la forma descrita anteriormente, el programa se comportará de manera diferente a la prevista:
>>> no_tuple = (2)
>>> type(no_tuple)
<class 'int'>
Con (2)nada nuevo tupla La instancia se crea porque los paréntesis ya se usan en este contexto para operaciones aritméticas con números enteros. Por lo tanto, los literales de tupla que contienen un solo elemento se escriben con una coma adicional después del elemento:
>>> a_tuple = (2,)
>>> type(a_tuple)
<class 'tuple'>
Puede omitir los paréntesis que encierran en un tupla definición. No obstante, las referencias separadas por comas se combinan en un tuplaal que se hace referencia como embalaje de tupla o, más simplemente, embalaje:
>>> date = 7, 26, 1987
>>> date
(7, 26, 1987)
Por el contrario, también es posible deshacer los valores de una tupla:
>>> date = 7, 26, 1987
>>> (month, day, year) = date
>>> month
7
>>> day
26
>>> year
1987
Este proceso se conoce como desempaquetado de tuplas o simplemente desempacar, y de nuevo se pueden omitir los paréntesis. Al combinar el empaquetado y el desempaquetado, puede intercambiar con mucha elegancia los valores de dos variables sin una variable auxiliar o combinar varias asignaciones en una sola línea:
>>> a, b = 10, 20
>>> a, b = b, a
>>> a
20
>>> b
10
El desembalaje no se limita a la tupla tipo de datos, pero funciona para tipos de datos secuenciales en general. En este caso, el término desempaquetado de secuencias también se usa comúnmente:
>>> a, b, c = "abc"
>>> a
'a'
Si se aplica correctamente, el uso de esta función puede contribuir a la legibilidad de los programas, ya que los detalles técnicos del almacenamiento en caché de datos pasan a un segundo plano de la intención real de intercambiar valores.
El desempaquetado también se puede utilizar para leer valores al principio y al final de una secuencia. Consideremos el siguiente ejemplo:
>>> numbers = [11, 18, 12, 15, 10]
>>> eleven, *others, ten = numbers
>>> eleven
11
>>> ten
10
>>> others
[18, 12, 15]
Si un asterisco (*) se antepone a una referencia al desempaquetar, todos los demás valores de la secuencia se almacenan en él. En el ejemplo anterior, el primer valor de números se almacena en once y el último valor en diez. Los números intermedios se agrupan en otros.
Cualquier número de otras referencias puede preceder y seguir a la entrada con asterisco. En particular, la primera o la última entrada puede tener un asterisco:
>>> numbers = [11, 17, 17, 19, 10]
>>> *something, nineteen, ten = numbers
>>> nineteen
19
>>> ten
10
>>> eleven, *blah_blah_blah = numbers
>>> eleven
11
>>> blah_blah_blah
[17, 17, 19, 10]
Siempre solo puede haber exactamente una referencia con un asterisco en una tarea con desempaquetado. Esto tiene sentido, ya que de lo contrario pueden surgir ambigüedades.
En general, debe tener cuidado al usar el desempaquetado para tipos de datos no ordenados. En el siguiente ejemplo, el orden de los elementos 1, 2y 3 depende del orden en que el conjunto {3,1,2} se itera sobre:
>>> a, b, c = {3, 1, 2}
>>> a, b, c
(1, 2, 3)
Debido a que este orden es un detalle de implementación, puede diferir entre diferentes versiones de Pitóno incluso entre diferentes ejecuciones del mismo programa.
A pesar de tupla las instancias son inmutables, los valores de los elementos contenidos durante su generación pueden cambiar. Cuando se crea una nueva tupla, se especifican las referencias que debe almacenar. Si dicha referencia apunta a una instancia de un tipo de datos mutable, como una lista, su valor aún puede cambiar:
>>> a = ([],)
>>> a[0].append("And yet it moves!")
>>> a
(['And yet it moves!'],)
La inmutabilidad de una tupla, por lo tanto, se refiere solo a las referencias que contiene y explícitamente no a las instancias detrás de ella.
Por lo tanto, el hecho de que las tuplas sean inmutables no garantiza que los elementos no cambien una vez que se haya creado la tupla.
Nota del editor: Esta publicación ha sido adaptada de una sección del libro. Python 3: la guía completa de Johannes Ernesti y Peter Kaiser.
Calle Eloy Gonzalo, 27
Madrid, Madrid.
Código Postal 28010
Paseo de la Reforma 26
Colonia Juárez, Cuauhtémoc
Ciudad de México 06600
Real Cariari
Autopista General Cañas,
San José, SJ 40104
Av. Jorge Basadre 349
San Isidro
Lima, LIM 15073