Las vistas de diccionario son esencialmente lo que su nombre dice: vistas son simplemente como una ventana en las claves y valores (o elementos) de un diccionario. Aquí es un extracto de la official documentation para Python 3:
>>> dishes = {'eggs': 2, 'sausage': 1, 'bacon': 1, 'spam': 500}
>>> keys = dishes.keys()
>>> values = dishes.values()
>>> # view objects are dynamic and reflect dict changes
>>> del dishes['eggs']
>>> keys # No eggs anymore!
dict_keys(['sausage', 'bacon', 'spam'])
>>> values # No eggs value (2) anymore!
dict_values([1, 1, 500])
(El Python 2 equivalente utiliza dishes.viewkeys()
y dishes.viewvalues()
.)
Este ejemplo muestra el carácter dinámico de puntos de vista: las teclas de vista es no una copia de las claves en un punto determinado en el tiempo, sino una ventana simple que le muestra las teclas; si se cambian, lo que ves a través de la ventana también cambia. Esta característica puede ser útil en algunas circunstancias (por ejemplo, uno puede trabajar con una vista de las teclas en varias partes de un programa en lugar de volver a calcular la lista actual de claves cada vez que las necesite).
Una ventaja es que mirando en, por ejemplo, las claves sólo utiliza un pequeño y fijo cantidad de memoria y requiere una pequeña cantidad fija de tiempo de procesador, ya que no hay creación de una lista de claves (Python 2, por otro lado, a menudo crea innecesariamente una nueva lista, citada por Rajendran T, que toma la memoria y el tiempo en una cantidad proporcional a la longitud de la lista). Para continuar con la analogía de la ventana, si quiere ver un paisaje detrás de una pared, simplemente haga una abertura (construya una ventana); copiar las claves en una lista correspondería a una pintura del paisaje en su pared, en su lugar, la copia toma tiempo, espacio y no se actualiza.
En resumen, las vistas son simplemente ... vistas (ventanas) en su diccionario, que muestran los contenidos del diccionario, incluso después de que cambie. Ofrecen características que difieren de las de las listas: una lista de claves contiene una copia de las teclas del diccionario en un punto dado en el tiempo, mientras que una vista es dinámica y es mucho más rápida de obtener, ya que no tiene que copiar ninguna datos (claves o valores) para poder ser creados.
+1. Ok, ¿cómo difiere eso de tener acceso directo a la lista interna de claves? ¿Es eso más rápido, más lento? Más memoria eficiente? Restringido? Si puede leerlo y editarlo, se siente exactamente lo mismo que tener una referencia a esta lista. –
Gracias. Lo que sucede es que las vistas * son * su acceso a "la lista interna de claves" (tenga en cuenta que esta "lista de claves" no es una lista de Python, pero es precisamente una vista). Las vistas son más eficientes en cuanto a la memoria que las listas de claves (o valores o elementos) de Python 2, ya que no copian nada; en realidad son como "una referencia a la lista de claves" (nótese también que "una referencia a una lista" simplemente se llama una lista, en Python, ya que las listas son objetos mutables). También tenga en cuenta que no puede editar las vistas directamente: en su lugar, aún edita el diccionario, y las vistas reflejan sus cambios de inmediato. – EOL
Ok, todavía no tengo clara la implementación, pero hasta ahora es la mejor respuesta. –