You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 21:08:10