In [639]: arr = np.arange(10)
При индексировании с помощью среза (базовое индексирование) arr2
представляет собой view
из arr
. Он разделяет буфер данных с arr
:
In [640]: arr2 = arr[5:8]
In [641]: arr2
Out[641]: array([5, 6, 7])
Если мы делаем копию, значения копируются, а не передаются:
In [642]: arr3 = arr[5:8].copy() # arr[[5,6,7]] is also a copy
Изменяя arr2
на месте, мы также модифицируем часть arr
:
In [643]: arr2 *= 10
In [644]: arr2
Out[644]: array([50, 60, 70])
In [645]: arr
Out[645]: array([ 0, 1, 2, 3, 4, 50, 60, 70, 8, 9])
Но не arr3
:
In [646]: arr3
Out[646]: array([5, 6, 7])
arr2 = arr2*10
не изменяет массив arr2
, а назначает совершенно новый массив переменной arr2
.
Так что вам нужно понять, что значит присвоить объект переменной. Разница между назначением переменной и изменением изменяемого объекта. И разница между копированием и просмотром массива (и между базовой и расширенной индексацией). Этот последний относится только к numpy
, остальные к Python.