Numpy数组视图疑问:为何视图与原数组对应元素id不同?
为什么numpy视图和原数组取同元素的id不一样?
先看你给出的代码:
import numpy as np x=np.array([[1,2,3],[4,5,6],[7,8,9]]) y=x[0:2,0:2] y.base # is x id(x[1,1]) id(y[1,1])
核心原因其实很直白:
- 当你用
x[1,1]或y[1,1]访问单个元素时,numpy不会直接返回底层内存里的原始数值,而是会临时创建一个新的Python标量对象(比如numpy.int64类型)来封装这个值。 - 每次执行这种索引操作,都会生成一个全新的对象,而
id()是用来标识Python对象唯一性的,新对象的id自然不同。 - 虽然
y是x的视图,二者共享底层内存数据,但每次取单个元素时的对象包装过程是独立的,和是不是视图没有关系。
你可以做个简单验证:连续两次取x[1,1],它们的id也会不一样:
print(id(x[1,1])) print(id(x[1,1])) # 输出的id和上一行不同
这就坐实了问题出在每次索引都会生成新的标量对象,和视图本身无关。
内容的提问来源于stack exchange,提问作者pythonist_newbie
相关产品推荐
相关产品推荐

