【发布时间】:2020-06-03 18:31:05
【问题描述】:
如果我采用一个简单而空的 numpy 数组,我可以看到它有 96 个字节的开销,
>>> sys.getsizeof( np.array([]) )
96
96 字节存储的是什么? numpy 或 Python 3 (cpython) 的 C 源代码在哪里设置?
【问题讨论】:
-
所有对象都有开销;它们不是原始值。它们存储诸如引用计数、对其类型的引用、指向存储实际数据的内存的指针等内容。
-
@chepner 我明白这一点。我什至使用了“开销”这个词。问题是这种情况下的开销是多少。 96 字节是 16、64 位整数。对于常规的 python 对象,我相信有一个 64 位 unsigned int 用于 ref 计数,一个用于打字。其他 14 个是什么?我在哪里可以找到它们?布局 numpy 数组的结构在哪里?
-
当然,它只需要是一个具有研究证据的重点问题。您看过 Numpy 源代码了吗?
-
@chepner 是的,我有......但这绝对不是必需的。我可以问这个问题,即使我根本不知道 C,它也会完全成为主题。对这个网站而言,唯一重要的是问题的定义明确,而不是重复。
-
而您实际上只是在请求一个指向外部资源的指针,即定义
numpy.array的源中的位置。 那让这个话题离题了。
标签: python python-3.x numpy python-internals internals