首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >id和numpy.shares_memory之间的关系是什么?

id和numpy.shares_memory之间的关系是什么?
EN

Stack Overflow用户
提问于 2019-07-27 23:58:58
回答 1查看 185关注 0票数 0

在Python3.x中,我不理解idshares_memory之间的关系。这是我的代码:

代码语言:javascript
复制
import numpy as np
a = np.arange(20)
print(a)
print(id(a))
b = a[::2]
print(b)
print(id(b))
np.shares_memory(a,b)

这是输出:

代码语言:javascript
复制
[ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19]
2784148965456
[ 0  2  4  6  8 10 12 14 16 18]
2784148964736
True

shares_memory的计算结果为True,但它们的id值不同。为什么会这样呢?

EN

回答 1

Stack Overflow用户

发布于 2019-07-28 03:50:34

内置函数id()返回Python对象的唯一标识符,在本例中为ndarray。如果两个对象具有相同的id,则它们是..同样的物体。它在Python中实现id()的常见方式是将指向对象的指针返回为一个整数。

存储在ndarray中的数据是一个单独的对象。可以有多个ndarray共享相同的存储器,即切片的结果。您可以使用arr.__array_interface__['data']检查ndarray数据中第一个元素的实际地址。

为了追踪数据的真正所有者,您可以使用base属性:

代码语言:javascript
复制
>> a = np.zeros(10)
>> b = a[1:]
>> c = b[1:] # c is made from b not a!
>> a.base is None
True
>> b.base is a
True
>> c.base is a
True

请注意,数据地址和id()可能在数值上相似,因为它们通常是通过连续分配创建的。

如果两个ndarray共享基本内存,则它们共享内存。请注意,如果object的base是None,那么base就是对象本身。此外,数组缓冲区必须至少共享一个字节。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57233790

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档