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