Python之整型

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个字节
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

两个猫崽子和你

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值