windows 64位机器,python3.7;后面的文章中,没有特别说明的话,都是在该环境下运行

int 占几个字节?

C语言中(GCC编译器),int 占据4个字节,python呢?

我们用python内置的 sys.getsizeof 方法来看看

28个字节! 也就是说 int 是占据 28个字节吗? 再看看下面的

又多了4个字节!

事实上,上面的 1073741824 = 2**30,我们可以试试

sys.getsizeof(2**30-1)

这是什么原因呢,百撕不得骑姐啊;stackoverflow的这篇文章给出了答案。

我们直接看 Aaron Hall 给出的答案:

也就是说 int 类型,每2 ** 30增加4个字节。

我们试试

sys.getsizeof(2**60)

没问题,是这个理儿

那python是怎么做到让 int 占据的字节大小可变长而不报错的呢?

具体地,我们看一下python的相关源码(我的是python3.7.4)

源文件:Include/longintrepr.h

/* Long integer representation.

The absolute value of a number is equal to

SUM(for i=0 through abs(ob_size)-1) ob_digit[i] * 2**(SHIFT*i)

Negative numbers are represented with ob_size < 0;

zero is represented by ob_size == 0.

In a normalized number, ob_digit[abs(ob_size)-1] (the most significant

digit) is never zero. Also, in all cases, for all valid i,

0 <= ob_digit[i] <= MASK.

The allocation function takes care of allocating extra memory

so that ob_digit[0] ... ob_digit[abs(ob_size)-1] are actually available.

CAUTION: Generic code manipulating subtypes of PyVarObject has to

aware that ints abuse ob_size's sign bit.

*/

struct _longobject {

PyObject_VAR_HEAD

digit ob_digit[1];

};

PyObject_VAR_HEAD 是所有python对象共有的头部,这里不分析,需要说明的是 这个头部对象里面有个 ob_size 指明了可变部分的长度。

重点就是 digit ob_digit[1]

digit 是32位无符号整型(和编译环境有关),ob_digit是一个动态数组,他存储了int对象的真实值。真实值为数组的每一个元素 * 2**(SHIFT*i)再相加。这里的SHIFT = 30(64位系统),i 为元素在数组中的索引值。

也因为这个设计,python3.7没有long类型只有int类型,int实际上就是值无限大(不能超出虚拟内存大小)的long。具体为什么要把int和long合并到一起,这是我们下一问了。

python中int占几个字节_小白学python第1问: int 占几个字节?相关推荐

  1. python int占几个字节_小白学python第1问: int 占几个字节?

    windows 64位机器,python3.7:后面的文章中,没有特别说明的话,都是在该环境下运行 int 占几个字节? C语言中(GCC编译器),int 占据4个字节,python呢? 我们用pyt ...

  2. python中的remove是什么意思_小白理解python中remove与del 的区别

    leetcode中的题目,感觉之前不太理解,就记录下来了. 题目:移动零,给定一个数组 nums, 编写一个函数将所有 0 移动到它的末尾,同时保持非零元素的相对顺序(Python3 环境). 例如: ...

  3. python 使用socks 爬虫_小白学 Python 爬虫(17):Requests 基础使用

    人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Li ...

  4. matplotlib plot 分组_小白学 Python 数据分析(16):Matplotlib(一)坐标系

    人生苦短,我用 Python 前文传送门: 小白学 Python 数据分析(1):数据分析基础 小白学 Python 数据分析(2):Pandas (一)概述 小白学 Python 数据分析(3):P ...

  5. post python爬虫_小白学 Python 爬虫(17):Requests 基础使用

    人生苦短,我用 Python 如果我的文章对您有帮助,请关注支持下作者的公众号:极客挖掘机,您的关注,是对小编坚持原创的最大鼓励:) 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Py ...

  6. python 爬虫框架_小白学 Python 爬虫(28):自动化测试框架 Selenium (下)

    人生苦短,我用 Python 如果我的文章对您有帮助,请关注支持下作者的公众号:极客挖掘机,您的关注,是对小编坚持原创的最大鼓励:) 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Py ...

  7. python中ifelifelse用在什么结构_详解Python if-elif-else知识点

    有的时候,一个 if - else - 还不够用.比如,根据年龄的划分:条件1:18岁或以上:adult 条件2:6岁或以上:teenager 条件3:6岁以下:kid Python if-elif- ...

  8. python中的常量可以修改吗_深入理解Python变量与常量

    变量是计算机内存中的一块区域,变量可以存储规定范围内的值,而且值可以改变.基于变量的数据类型,解释器会分配指定内存,并决定什么数据可以被存储在内存中.常量是一块只读的内存区域,常量一旦被初始化就不能被 ...

  9. logback-spring.xml 文件路径 相对路径_小白学 Python(18):基础文件操作

    人生苦短,我选Python 前文传送门 小白学 Python(1):开篇 小白学 Python(2):基础数据类型(上) 小白学 Python(3):基础数据类型(下) 小白学 Python(4):变 ...

  10. ora-00923数据类型不一致_小白学 Python(2):基础数据类型(上)

    如果我的文章对您有帮助,请关注支持下作者的公众号:极客挖掘机,获取最新干货推送:) 人生苦短,我选Python 引言 前文传送门 小白学 Python(1):开篇 接触一门新的语言,肯定要先了解它的基 ...

最新文章

  1. mysql表 字段 说明_mysql表字段说明
  2. 上海有哪些计算机技术专科学校,上海计算机专业大学排名,第一名居然是这所大学!...
  3. 人工智能不是计算机领域能学么,华南理工大学《高级人工智能》考试真题1
  4. python字符串合并去重_015day--python集合和字符串
  5. Summarize to the Power of Two(CF-1005C)
  6. SpringBoot(入门)
  7. 工业机器人用铸铁牌号_锻钢牌号表示方法你了解么?
  8. 【ElasticSearch】Es 源码之 AutoFollowCoordinator 源码解读
  9. 开源框架 Drupal 修复多个访问绕过和 CSRF 漏洞
  10. R︱Linux+Rstudio Server尝鲜笔记(打造最佳Rstudio体验+报错的解决方案)
  11. C#实现Base64编码与解码及编码名称和代码页(Encoding.GetEncoding)
  12. 从零基础入门Tensorflow2.0 ----六、30 kaggle 10 monkeys 基础模型搭建与训练
  13. Visual Stadio 2012创建WebApplication应用和运行赏析
  14. Java中的char占用几个字节
  15. [数论]JZOJ 5946 时空幻境
  16. oracle qmon,10g QMON Architecture及AQ_TM_PROCESSES
  17. 包饺子、看表演、逛庙会 中外居民北京“过大年”
  18. CrazyTalk 8 中文版 照片会说话动画制作 带动作脚本 点头眨眼动画制作
  19. 计算机cpu对什么访问最快,CPU直接访问的存储器是什么?
  20. (7)centos7 同步服务器时间

热门文章

  1. python dynamic array
  2. win10 uwp 渲染原理 DirectComposition 渲染
  3. 在线读取office 文件(Word excel 等)
  4. 自动化测试环境搭建--Python及selenium
  5. linux DHCP安装和测试
  6. Jade报错:Invalid indentation,you can use tabs or spaces but not both问题
  7. spark sql 对接 HDFS
  8. [禅悟人生]先将小事做好再来修禅心
  9. 标 题: 三维游戏里面的自动寻路的算法可能是什么样的?
  10. ubuntu服务器系统日志在哪里,如何在Ubuntu上查看和写入系统日志文件