您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

python – 为什么sys.getsizeof(numpy.int8(1))返回12?

5b51 2022/1/14 8:20:58 python 字数 1529 阅读 493 来源 www.jb51.cc/python

我想创建一个小的NumPy整数来节省内存.但是,我注意到了import numpy,sys print sys.getsizeof(numpy.int8(1)) 打印12,所以似乎numpy.int8()生成12个字节而不是1个字节的数据.为什么是这样?最佳答案Numpy标量具有与CPython数据类型类似的实现,例如python float或整数类型.换句

概述

我想创建一个小的NumPy整数来节省内存.但是,我注意到了

import numpy,sys
print sys.getsizeof(numpy.int8(1))

打印12,所以似乎numpy.int8()生成12个字节而不是1个字节的数据.为什么是这样?

>类型为int的reference counter
>指向其对象类型实例的指针
>变量的值

在32位体系结构中,引用计数器和指针通常分别为4个字节.值字段原则上可以是任何大小,但是structure padding将导致struct分配4个字节,即使值需要更少.

如果您正在使用64位体系结构,请将“4字节”替换为“8字节”.

因此,32位系统上的所有numpy整数由(有效)三个4字节变量组成,而sys.getsizeof(numpy.int8(1))给出12.在64位系统上,它将返回24.

大多数numpy标量大小相同.一个例外是numpy.complex类型,通常需要双重存储.由于这在内存中与其他两个变量对齐,因此可以忽略填充并简单地将为该值分配的字节加倍,分别在32位和64位中分别给出16和32个字节.类似的规则适用于更奇特的类型(complex256,float80等)

总结

以上是编程之家为你收集整理的python – 为什么sys.getsizeof(numpy.int8(1))返回12?全部内容,希望文章能够帮你解决python – 为什么sys.getsizeof(numpy.int8(1))返回12?所遇到的程序开发问题。


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶