如何确定python使用的类型的确切大小

如何确定python使用的类型的确切大小,python,Python,我认为python中的int用4个字节表示,为什么它报告12个字节 请有人解释为什么int只使用4个字节时报告12个字节是的,int实例在您的系统上占用12个字节。整数(与任何对象一样)具有属性,即指向其他对象的指针,这些属性占用的内存空间超出了对象自身值所使用的内存空间。因此,4个字节表示整数的值,4个字节表示指向\uuuuuu class\uuuuuuu的指针(否则,Python将不知道对象属于什么类型以及如何开始解析从int类及其父类继承的属性名),另外4个字节表示对象的引用计数,由垃圾收

我认为python中的int用4个字节表示,为什么它报告12个字节


请有人解释为什么int只使用4个字节时报告12个字节是的,
int
实例在您的系统上占用12个字节。整数(与任何对象一样)具有属性,即指向其他对象的指针,这些属性占用的内存空间超出了对象自身值所使用的内存空间。因此,4个字节表示整数的值,4个字节表示指向
\uuuuuu class\uuuuuuu
的指针(否则,Python将不知道对象属于什么类型以及如何开始解析从
int
类及其父类继承的属性名),另外4个字节表示对象的引用计数,由垃圾收集器使用


类型
int
在您的系统上占用436个字节,这些字节将指向
int
类的各种方法和其他属性,以及Python对该类所需的任何其他内务管理信息。
int
类是在标准Python实现中用C编写的;您可以查看源代码并查看其中的内容。

来自以下文档:

getsizeof()
调用对象的
\uuuuuizeof\uuuuuu
方法,如果对象由垃圾收集器管理,则会增加额外的垃圾收集器开销

这可能就是为什么
sys.getsizeof(1)
会给您12个字节。对于第一行,请记住
int
对象是什么:

>>> sys.getsizeof(int)
436 #? does this mean int occupies 436 bytes .

>>> sys.getsizeof(1)
12 #12 bytes for int object, is this the memory requirement.
>>int

int
是整数类型本身,而不是整数。python中的整数实际上占用了它所需要的字节数(这就是为什么不需要担心溢出),而类型是处理所有功能的地方。我相信这种区别只对内置类型有效,对于用户定义的对象,类型本身的大小可能与该类型的实例大小相似。

也可能是、。基本上,这里链接的工具(Heapy)是Python内存评测论文的一部分。如果您真的想知道,请检查一下。Python不像其他一些语言(ruby、一些Lisp)那样,通过在对象指针中使用特殊位来存储(足够小的)整数,因此它们会为纯整数占用大量内存。如果12个字节对您来说太多了,并且您想存储大量的整数数组,请查看numpy的特殊数组。@eryksun:想想
array.append的平均性能有多糟糕,如果它没有过度分配,或者读取源代码(arraymodule.c)。@kindall:您的答案是针对Python 2.x的。考虑把它扩展到3。x。如果一个整数对象真的需要12字节,它并没有过度分配。特殊容器(数组和numpy)通过存储C*int值并仅在接口上转换为python对象来保存这些值。@eryksun:如何测试容器是否过度分配??
>>> int
<type 'int'>