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

numpy数组两种表示形式的view方法内存ID差异原因解析

解析Numpy数组原对象与切片视图的view方法内存ID差异

这事儿得从Numpy数组切片的本质说起,咱们一步步拆解:

核心本质:切片返回的是新的ndarray实例(共享数据但对象独立)

  • 变量a是一个实打实的numpy.ndarray实例,它在内存里占据了一块属于自己的对象空间,对应输出里的0x10ef5e3f0。
  • 当你执行a[:]时,Numpy会返回原数组的视图,但注意:这个视图是一个全新的ndarray对象!它和原数组a共享底层的数据缓冲区(所以修改a[:]的值会影响a),但这个视图对象本身在内存里是独立的,有自己的专属对象ID,也就是输出里的0x10e8936f0。

为什么view方法的内存ID不同?

你打印的a.view和a[:].view,本质是绑定到不同ndarray实例上的方法对象:

  • a.view是绑定到原数组a这个实例的view方法,它的内存地址和a的实例ID强相关;
  • a[:].view是绑定到a[:]这个新切片视图实例的view方法,它的内存地址关联的是切片视图的实例ID。

因为这两个方法绑定的是完全不同的ndarray实例,所以它们的内存ID自然不一样。

小验证:直接打印实例ID就能确认

你可以试试运行这两行代码:

print(id(a))
print(id(a[:]))

输出的结果会正好对应你之前看到的那两个内存地址——这就实锤了:a和a[:]是两个不同的对象,它们的绑定方法自然也不在同一块内存里。

内容的提问来源于stack exchange,提问作者kichinosukey

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 06:47:40