为了账号安全,请及时绑定邮箱和手机立即绑定

numpy数组的多个元素具有相同的id

numpy数组的多个元素具有相同的id

红糖糍粑 2023-08-08 10:20:10
我试图理解为什么具有不同值的元素具有相同的id。有人可以向我解释一下 NumPy 中内存管理的情况吗?下面的例子import numpy as np x=np.array([1,2,3,4]) print([id(a) for a in x])[140718968034552, 140719258631960, 140718968034552, 140719258631960]这里,第一个和第三个元素具有相同的id (140718968034552),尽管它们具有不同的数值。与第二个和第四个元素相同。
查看完整描述

1 回答

?
潇湘沐

TA贡献1816条经验 获得超6个赞

In [54]: x=np.array([1,2,3,4])

In [55]: [type(a) for a in x]

Out[55]: [numpy.int64, numpy.int64, numpy.int64, numpy.int64]

In [56]: [id(a) for a in x]

Out[56]: [140147220886728, 140147220887808, 140147220886728, 140147220887808]

小整数的 id 是唯一的,但这不是数组包含的内容:


In [57]: [type(a) for a in x.tolist()]

Out[57]: [int, int, int, int]

In [58]: [id(a) for a in x.tolist()]

Out[58]: [10914496, 10914528, 10914560, 10914592]

In [59]: id(2)

Out[59]: 10914528

另一种获取int对象的方法:


In [60]: [id(a.item()) for a in x]

Out[60]: [10914496, 10914528, 10914560, 10914592]

编辑

如果我将 的元素分配x给变量元组,则它们id不会被重用。 id(x0)还在使用中,所以id(x2)不能接受。的改变Out[56]只是解释器重用内存的产物。


In [73]: x0,x1,x2,x3 = x

In [74]: id(x0),id(x1),id(x2),id(x3)

Out[74]: (140146931335720, 140146931335504, 140146931335600, 140146931335576)

In [75]: type(x0)

Out[75]: numpy.int64


查看完整回答
反对 回复 2023-08-08
  • 1 回答
  • 0 关注
  • 88 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信