numpy数组的多个元素具有相同的id [英] Multiple elements of numpy array has same id

查看:63
本文介绍了numpy数组的多个元素具有相同的id的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图理解为什么具有不同值的元素具有相同的 id.有人可以向我解释一下 NumPy 中内存管理的情况.下面的例子

I am trying to understand why elements with different value have the same id. Could someone explain me what is going with respect to memory management in NumPy. Example below

import numpy as np
x=np.array([1,2,3,4])
print([id(a) for a in x])

[140718968034552, 140719258631960, 140718968034552, 140719258631960]

此处,第一个和第三个元素具有相同的 id(140718968034552),尽管它们具有不同的数值.与第二个和第四个元素相同.

Here, first and the third element has the same id(140718968034552) though they hold different numerical values. Same as for second and fourth elements.

推荐答案

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 是唯一的,但这不是数组包含的内容:

The id of small integers is unique, but that's not what the array contains:

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 对象的方法:

Another way to get the int objects:

In [60]: [id(a.item()) for a in x]
Out[60]: [10914496, 10914528, 10914560, 10914592]

编辑

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

edit

If I assign the elements of x to a tuple of variables, the id are not reused. id(x0) is still in use, so id(x2) cannot take it. The alteration in Out[56] is just an artifact of memory reuse by the interpreter.

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

这篇关于numpy数组的多个元素具有相同的id的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆