¿Qué son dict_keys, dict_items y dict_values?

Me encontré con estos tres tipos cuando usé collections.Counter . Métodos viewkeys (), viewitems () y viewvalues ​​() de Counter.

Los valores que esos tres métodos devolvieron son de los tipos dict_keys , dict_items y dict_values .

Son iterables, como he notado.

Pero mi pregunta es, ¿por qué existen estos tres tipos? ¿O cuál es su uso?

El documento Novedades en 2.7 es un lugar donde se presentan. Estos “puntos de vista” se introdujeron ( aquí se proponen) para Python 3 (y están respaldados a 2.7, como ha visto) para que sirvan como el mejor de todos los mundos para las piezas del dictamen al que se refieren.

Antes teníamos los métodos de keys / values / items que simplemente hacían listas. Esto desperdicia memoria copiando la información del iterkeys y itervalues métodos iterkeys / itervalues / iteritems que no desperdiciaron esta memoria pero que no tenían muchas funciones (lo único que podía hacer era iterar sobre ellos, y solo podía hacerlo una vez) ). Estas nuevas vistas tienen características lógicas, como establecer operaciones, comparar eficientemente y ser iterables varias veces.