Массивы Numpy и оператор идентификации
Имея массив numpy, такой как x, и срез, который включает все его элементы как z, почему операторы идентификации дают false, несмотря на то, что изменение значения любого элемента в z отражается на x и наоборот
x = np.array([1, 2, 3, 4, 5])
z = x[:]
x is z
# Output:
False
1 ответ
Из Numpy Internals:
Массивы NumPy состоят из двух основных компонентов: необработанных данных массива (далее называемых буфером данных) и информации о необработанных данных массива.
в случае нарезки
z = x[:]
, это представление, NumPy хранит значительный набор данных, который описывает, как интерпретировать данные в буфере данных в другом месте памяти, но он может совместно использовать элементы из , следовательно, оба имеют разные идентификаторы и, следовательно,
False
.
>>> x = np.array([1, 2, 3, 4, 5])
>>> z = x[:] # same as x.view()
>>> x[2]
3
>>> x[2] = 1
>>> x
array([1, 2, 1, 4, 5])
>>> z
array([1, 2, 1, 4, 5])
>>> x is z
False
Если вы измените
x
,
z
также будут изменены. Дополнительные ссылки в документации Numpy