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

时间:2011-10-15 16:48:36

标签: python

>>> 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.

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

请有人解释为什么当int只使用4个字节时报告12个字节

2 个答案:

答案 0 :(得分:10)

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

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

答案 1 :(得分:2)

来自sys.getsizeof的文档:

  

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

这可能是sys.getsizeof(1)给你12个字节的原因。至于你的第一行,请记住int对象是什么:

>>> int
<type 'int'>

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