2024-09-26 22:09:29 发布
网友
>>> 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个字节
是的,一个int实例占用系统12个字节。整数(和任何对象一样)都有属性,即指向其他对象的指针,它们占用的内存空间超出了对象自身的值。因此,4个字节表示整数的值,4个字节用于指向__class__的指针(否则,Python将不知道该对象属于什么类型,以及如何开始解析从int类及其父类继承的属性名),另外4个字节用于对象的引用计数,垃圾回收器将使用它。在
int
__class__
类型int在系统上占用436个字节,它将指向int类的各种方法和其他属性,以及Python对该类所需的任何其他内务处理信息。int类是在标准Python实现中用C编写的;您可以查看源代码并查看其中的内容。在
来自^{}的文档:
getsizeof() calls the object’s __sizeof__ method and adds an additional garbage collector overhead if the object is managed by the garbage collector.
getsizeof()
__sizeof__
这可能就是sys.getsizeof(1)给你12个字节的原因。对于第一行,请记住int对象是什么:
sys.getsizeof(1)
>>> int <type 'int'>
int是整数类型本身,而不是整数。python中的整数实际上占用所需的字节数(这就是为什么不需要担心溢出的原因),而类型是处理所有这些功能的地方。我相信这种区别只对内置类型有效,对于用户定义的对象,类型本身的大小可能与该类型的实例大小相似。在
是的,一个
int
实例占用系统12个字节。整数(和任何对象一样)都有属性,即指向其他对象的指针,它们占用的内存空间超出了对象自身的值。因此,4个字节表示整数的值,4个字节用于指向__class__
的指针(否则,Python将不知道该对象属于什么类型,以及如何开始解析从int
类及其父类继承的属性名),另外4个字节用于对象的引用计数,垃圾回收器将使用它。在类型
int
在系统上占用436个字节,它将指向int
类的各种方法和其他属性,以及Python对该类所需的任何其他内务处理信息。int
类是在标准Python实现中用C编写的;您可以查看源代码并查看其中的内容。在来自^{} 的文档:
这可能就是
sys.getsizeof(1)
给你12个字节的原因。对于第一行,请记住int
对象是什么:int
是整数类型本身,而不是整数。python中的整数实际上占用所需的字节数(这就是为什么不需要担心溢出的原因),而类型是处理所有这些功能的地方。我相信这种区别只对内置类型有效,对于用户定义的对象,类型本身的大小可能与该类型的实例大小相似。在相关问题 更多 >
编程相关推荐