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

为什么对numpy数组元素调用id()函数会返回不同结果?

问题原因说明

你遇到的id不一致问题是numpy数组的底层存储机制和Python原生对象的差异导致的,核心原因如下:

  • Python原生嵌套列表的每个元素本身就是独立的Python对象,列表仅存储这些对象的引用,你多次访问list[0][0]拿到的都是同一个对象,id值自然相同。
  • numpy数组是连续存储的同类型原始数值,并没有给每个元素单独创建对应的Python对象,你每次执行a[0][0]时,numpy都会临时生成一个新的Python int包装对象来承载底层的原始值,这个临时对象在使用完成后就会被回收,两次调用生成的是不同的临时对象,因此id值不一样。

你可以通过下面的代码验证这个逻辑:

import numpy as np
a = np.array([[0,1,2],[3,4,5],[6,7,8]])

# 把临时生成的包装对象赋值给变量持有,多次取同一个变量的id会一致
val = a[0][0]
print(id(val))
print(id(val))

# 重新取数组元素会生成新的包装对象,id和之前的val不同
print(id(a[0][0]))

如果需要查看numpy数组对应位置底层原始值的真实内存地址,可以使用a[0,0].__array_interface__['data'][0],同一个位置的该值是固定不变的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 07:09:04