且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

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

更新时间:2022-04-01 03:02:40

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