В крошечных подмассивах, полученных с помощью любой из операций нарезки, маскирования или необычного индексирования, это просто представления исходного массива, которые можно продемонстрировать следующим образом:
$ python3
Python 3.5.2 (default, Nov 23 2017, 16:37:01)
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy as np
>>> np.__version__
'1.11.0'
>>> a = np.arange(3); a[:2] = 111; a
array([111, 111, 2])
>>> a = np.arange(3); a[a<2] = 111; a
array([111, 111, 2])
>>> a = np.arange(3); a[[0,1]] = 111; a
array([111, 111, 2])
В приведенном выше примере весь подмассив был назначен. Однако если мы присваиваем элементу подмассива, результат операции среза все еще ведет себя как представление, тогда как результаты операций маскирования и необычного индексирования ведут себя как независимые копии:
>>> a = np.arange(3); a[:2][0] = 111; a
array([111, 1, 2])
>>> a = np.arange(3); a[a<2][0] = 111; a
array([0, 1, 2])
>>> a = np.arange(3); a[[0,1]][0] = 111; a
array([0, 1, 2])
Это ошибка в NumPy, или это задумано? Если это так, то каково обоснование такой несоответствия?