2012-04-02 15 views
7

He sabido por un tiempo que la principal diferencia entre listas y tuplas en Python es que las listas son mutables y las tuplas no. Más allá de eso y de los diferentes métodos disponibles para ellos, sé muy poco sobre listas y tuplas. ¿Hay alguna otra diferencia entre ellos? ¿Existen ventajas/desventajas de (aparte de la inmutabilidad) al usar una tupla sobre una lista en Python 3? ¿Tiene uno un tiempo de acceso más rápido, o tiene un tamaño de memoria más pequeño o contiene más métodos que el otro? ¿Son sus estructuras internas diferentes de alguna manera? ¿O es una tupla solo una lista inmutable, nada más?Diferencia entre lista y tupla (menos inmutabilidad) en Python?

+0

posible duplicado de [¿Cuál es la diferencia entre la lista y tuplas?] (Http://stackoverflow.com/questions/626759/whats-the-difference-between-list-and-tuples) –

Respuesta

7

Tanto las listas como las tuplas se implementan internamente como matrices de referencias a los objetos del elemento. De esta forma, ambos pueden indexarse ​​y ambos requieren la misma cantidad de memoria para cada elemento. Internamente, ambos son homogéneos (referencias sin tipo). Lógicamente, ambos son heterogéneos (desreferenciación automática, el tipo está vinculado al objeto de destino).

La lista se puede modificar, por lo que la matriz interna es una matriz dinámica. La tupla no se puede modificar, por lo que internamente es una matriz de tamaño fijo. Desde ese punto de vista, las tuplas son más simples.

Para los que es más rápido o no, puede medir la situación concreta utilizando el módulo timeit.

Debe tener en cuenta que las tuplas son inmutables solo con respecto al número y a los valores de las referencias almacenadas. Si (por ejemplo) una lista se usa como uno de los elementos de tupla, el contenido de la lista se puede cambiar. De esta forma, lógicamente, el contenido de la tupla no es constante (dicha tupla no es hashable).

Use el tipo que sea mejor para este propósito. No hay una preferencia estricta Depende de la situación.

4

Ejecutar dir en ambos - lista de métodos bastante diferente (pop demostrado a continuación). tuplas pueden ser más rápido

>>> alist = [1,2,3] 
>>> atuple = (1,2,3) 
>>> alist.pop() 
3 
>>> atuple.pop() 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
AttributeError: 'tuple' object has no attribute 'pop' 

'append', 'contar', 'extender', 'índice', 'Insertar', 'pop', 'eliminar', 'atrás', 'tipo' son todos los disponibles para listas, y no para tuplas, lo cual tiene sentido, dada la idea de inmutabilidad.

Filosóficamente, algunas personas esperan listas homogéneas, y no tienen esa expectativa de tuplas.

+0

¿Hay diferencias internas en los tipos, como la estructura o la codificación? – fouric

+0

Si se refiere a la codificación de cadenas, entonces es irrelevante para las tuplas. La codificación es solo una forma de convertir cadenas abstractas a secuencias concretas de bytes. Cuando tuple contiene un elemento de cadena, el objeto de cadena se crea fuera de la tupla. El elemento de tupla solo se refiere al objeto (referencia sin tipo). Esto es lo mismo con elemento de tupla o elemento de lista. – pepr

Cuestiones relacionadas