1、python中一切都是对象,因此python中其实根本不存在int float这些类型。
2、int其实是一个python对象。
3、整数类型 int,在python中实际是上长整型,理论是可以存储无限大小的整型数,正数负数和0。
一、int类型的结构
python中的一个int(或其他)映射到c语言中是一种复杂结构体。所以所占的字节比C语言中大很多。
python实际的值只是相应C结构中的一个属性,难怪python的int占28个字节,而C语言只需要4个字节,因为python还存储了很多相关的其他信息!其他信息是实际数值的6倍大小。
typedef struct {
PyObject_HEAD
long ob_ival;
} PyIntObject;
struct _longobject {undefined
long ob_refcnt; // 引用计数
PyTypeObject *ob_type; //变量类型
size_t ob_size; //实际占用内容大小
long ob_digit[1]; //存储的实际python值
};
python的int在 longintepr.h 中定义:
struct _longobject {
PyObject_VAR_HEAD
digit ob_digit[1];
};
这结构是什么意思呢,重点在于 ob_digit 它是一个数组指针。digit 可认为是 int的别名。
python的整型存储机制是这样的。比方要表示一个很大的数:123456789 。
而每个元素最大只能表示3位十进制数(为理解打的比方)。那么python就会这样存储:
ob_digit[0] = 789
ob_digit[1] = 456
ob_digit[2] = 123
低位存于低索引下。python中整型结构中的数组,
每个元素最大存储 15 位的二进制数(不同位数操作系统有差异32位系统存15位,64位系统是30位)。
二、int类型所占的内存大小
python中可以用sys.getsizeof(object)来获取对象所占内存的大小。
import sys
# 内存大小
print(sys.getsizeof(0)) # 24个字节
print(sys.getsizeof(1)) # 28个字节
print(sys.getsizeof(999999999)) # 28个字节
print(sys.getsizeof(1000000000)) # 28个字节
print(sys.getsizeof(1210101010)) # 32个字节