有一个像 x 这样的 numpy 数组和一个包含所有元素作为 z 的切片,为什么恒等运算符给出错误,尽管改变 z 中任何元素的值都会反映在 x 上,反之亦然
x = np.array([1, 2, 3, 4, 5])
z = x[:]
x is z
# Output:
False
有一个像 x 这样的 numpy 数组和一个包含所有元素作为 z 的切片,为什么恒等运算符给出错误,尽管改变 z 中任何元素的值都会反映在 x 上,反之亦然
x = np.array([1, 2, 3, 4, 5])
z = x[:]
x is z
# Output:
False
来自Numpy 内部:
NumPy 数组由两个主要部分组成,原始数组数据(从现在开始,称为数据缓冲区)和有关原始数组数据的信息。
在切片的情况下z = x[:]
,它是一个视图,NumPy 存储了一组重要的数据,这些数据描述了如何在不同内存位置的数据缓冲区中解释数据,但它可以共享来自 的元素z
,因此两者都有不同的 id 和因此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 文档