在 Python 中存储整数所需的字节数 [重复]

Posted

技术标签:

【中文标题】在 Python 中存储整数所需的字节数 [重复]【英文标题】:Number of bytes required to store an integer in Python [duplicate] 【发布时间】:2018-02-10 20:17:51 【问题描述】:

我使用sys.maxsize 检查了 Python 持有的整数的最大大小,它返回给我9223372036854775807

那为什么我还能存储大于这个范围的值呢?

存储一个整数需要多少字节,Python会根据整数的大小改变字节数吗?

我正在使用 Python 3.6

【问题讨论】:

您确实意识到字节数与这些字节可以表示的不同吗? 在 Python 2 中,任何大于 2^63 - 1 的整数都是 long,并将用尾随 L 表示:9223372036854775808L @ZachGates 与这个问题并不真正相关。 基本上,sys.maxsize 不是int 的最大大小。它是 机器字 的最大大小,因此,在您的 64 位系统上,即2**63 - 1。这许多 bytes 基本上就是可以分配多少内存。请注意,这就是为什么在 32 位版本的 Python 上,无论您的硬件支持多少,您都不能分配超过 4 GB 的内存。这是因为最大可寻址大小是2**32 - 1 == 4294967295。只是碰巧在 Python 2 中,int 类型使用机器字的大小,但一个可以使用 128 位... 你把它和maxint混在一起了,重复的似乎是对的 【参考方案1】:

如果您检查docs 中的sys.maxsize,您会看到

sys.maxsize 一个整数,给出Py_ssize_t 类型变量的最大值。在 32 位平台上通常是 2**31 - 1,在 64 位平台上通常是 2**63 - 1

里面没有关于 Python ints 的内容!它是在谈论 Py_ssize_t,这是一个内部 C API 事物,与使用 Python ints 没有实际相关性。

Python ints 使用任意精度表示,它将使用更多字节的内存来表示更大的整数。它们不受Py_ssize_ts 值的限制。

【讨论】:

"Python 整数使用任意精度表示,它将使用更多字节的内存来表示更大的整数。它们不受 Py_ssize_ts 值的限制。" - 这是有道理的。谢谢@user2357112 +1 和@vivek_ratnaparkhi 你引用的文字也为我澄清了一些事情。我没有使用太多Python2,我只是想知道为什么Python3 中的int 可以容纳大于64 位无符号整数的整数,例如在C++。是的,我只想告诉我一个事实:int 不是原始类型,它会使用大于 64 bit unsigned integer 的字节来表示引擎盖下的整数。”。好吧,其他帖子的大多数答案都在谈论其他内容。 :-(

以上是关于在 Python 中存储整数所需的字节数 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

习题集一

MySQL 的 float(24) 列所需的存储大小是多少?

如何计算在MODBUS协议中传送一帧数据时所需的时间?

我如何显示一个字节的位长,而不是整数

Python:正则表达式与所需的相反[重复]

MODBUS RTU协议中浮点数是如何存储,读到浮点数寄存器的数值如何转换成所需的浮点数