Не могли бы вы привести один пример того, почему выполнение этого с помощью встроенного фрагмента Python приведет к нежелательным крайним случаям?

только сейчас заметил после комментированияэтот ответСрезы в Python 3 возвращают мелкие копии того, что они нарезают, а не представления. Почему это все еще так? Даже оставляя в стороне использование Numpy представлений, а не копий для нарезки, тот факт, чтоdict.keys, dict.values, а такжеdict.items все возвращаемые представления в Python 3 и то, что существует множество других аспектов Python 3, ориентированных на более широкое использование итераторов, создают впечатление, что было бы движение к тому, чтобы срезы становились похожими.itertools действительно естьislice функция, которая создает итеративные срезы, но она более ограничена, чем обычные срезы, и не обеспечивает функциональность представления в соответствии сdict.keys или жеdict.values.

Кроме того, тот факт, что вы можете использовать присвоение фрагментам для изменения исходного списка, но фрагменты сами являются копиями, а не представлениями, является противоречивым аспектом языка и, похоже, нарушает некоторые из принципов, проиллюстрированных вдзен питона.

То есть тот факт, что вы можете сделать

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

Но нет

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

или что-то вроде

>>> 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]

Кажется несколько произвольным / нежелательным.

Я в курсеhttp://www.python.org/dev/peps/pep-3099/ и часть, где написано «Ломтики и расширенные ломтики не исчезнут (даже если__getslice__ а также__setslice__ API могут быть заменены), и при этом они не будут возвращать представления для стандартных типов объектов. ", Но в связанном обсуждении не упоминается, почему было принято решение о нарезке по представлениям; фактически, большинство комментариев по этому конкретному предложению из предложения, перечисленные в оригинальном сообщении, казались положительными.

Что помешало реализовать что-то подобное в Python 3.0, который был специально разработан так, чтобы не быть строго обратно совместимым с Python 2.x и, таким образом, был бы наилучшим временем для реализации такого изменения в дизайне, и есть ли что-нибудь, что может предотвратить это в будущих версиях Python?

Ответы на вопрос(2)

Ваш ответ на вопрос