Python数组ID值

问题描述

为什么id()函数为python中数组的备用元素返回相同的值?我使用以下代码

import numpy as np

a = np.array([3,6,9,12,5])
print('array id\t',id(a))
print(a[0],'\t',id(a[0]))
print(a[1],id(a[1]))
print(a[2],id(a[2]))
print(a[3],id(a[3]))
print(a[4],id(a[4]))

我得到的输出如下:

array id     59184176
3    200295200
6    200295136
9    200295200
12   200295136
5    200295200

解决方法

这是特定于numpy数组工作方式的。数据以有效的方式存储,而不会产生为每个元素存储对象的成本。相反,当您从数组中读取对象时,将根据需要创建对象。

这意味着每次您执行a[0]等操作时,都会创建并返回一个新对象。如果不保留对它的引用,则该对象将被丢弃,并且该ID可以重用。因此,在您的情况下,不久之后,您将获得另一个具有相同ID的对象。

您可以说a[0]每次被调用时都会创建一个新对象,因为只是尝试

a[0] is a[0]

评估为假(至少在我尝试时)。

或者,如果您同时获得对从数组中获取的所有对象的引用,则它们都将具有不同的ID。

[id(x) for x in a]
# [4538316976,4538316784,4538317168,4538317200,4538317296]

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...