¿Por qué las porciones en Python 3 siguen siendo copias y no vistas?

Como ahora noté después de comentar enesta respuesta, las rebanadas en Python 3 devuelven copias superficiales de lo que sea que estén cortando en lugar de vistas. ¿Por qué sigue siendo así? Incluso dejando de lado el uso de vistas de numpy en lugar de copias para cortar, el hecho de quedict.keys, dict.values ydict.items todas las vistas devueltas en Python 3, y que hay muchos otros aspectos de Python 3 orientados a un mayor uso de iteradores, parece que habría habido un movimiento para que los cortes se volvieran similares. @itertools tiene unisliceunción @ que crea cortes iterativos, pero que es más limitada que el corte normal y no proporciona la funcionalidad de visualización en las líneas dedict.keys odict.values.

demás, el hecho de que puede utilizar la asignación a sectores para modificar la lista original, pero los sectores son copias y no vistas, es un aspecto contradictorio del lenguaje y parece que viola varios de los principios ilustrados enel Zen de Python.

s decir, el hecho de que puedes hacer

>>> a = [1, 2, 3, 4, 5]
>>> a[::2] = [0, 0, 0]
>>> a
[0, 2, 0, 4, 0]

Pero n

>>> a = [1, 2, 3, 4, 5]
>>> a[::2][0] = 0
>>> a
[0, 2, 3, 4, 5]

o algo así como

>>> a = [1, 2, 3, 4, 5]
>>> b = a[::2]
>>> b
view(a[::2] -> [1, 3, 5])   # numpy doesn't explicitly state that its slices are views, but it would probably be a good idea to do it in some way for regular Python
>>> b[0] = 0
>>> b
view(a[::2] -> [0, 3, 5])
>>> a
[0, 2, 3, 4, 5]

Parece algo arbitrario / indeseable.

Soy consciente dehttp: //www.python.org/dev/peps/pep-3099 y la parte donde dice "Las rebanadas y las rebanadas extendidas no desaparecerán (incluso si la__getslice__ y__setslice__ API se pueden reemplazar) ni devolverán vistas para los tipos de objeto estándar ", pero la discusión vinculada no menciona por qué se tomó la decisión de dividir las vistas; de hecho, la mayoría de los comentarios sobre esa sugerencia específica de las sugerencias enumeradas en la publicación original parecían ser positivas.

Lo que evitó que algo como esto se implementara en Python 3.0, que fue diseñado específicamente para no ser estrictamente compatible con Python 2.x y, por lo tanto, habría sido el mejor momento para implementar tal cambio en el diseño, y ¿hay algo que puede evitarlo en futuras versiones de Python?

Respuestas a la pregunta(2)

Su respuesta a la pregunta