在 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 int
s 的内容!它是在谈论 Py_ssize_t
,这是一个内部 C API 事物,与使用 Python int
s 没有实际相关性。
Python int
s 使用任意精度表示,它将使用更多字节的内存来表示更大的整数。它们不受Py_ssize_t
s 值的限制。
【讨论】:
"Python 整数使用任意精度表示,它将使用更多字节的内存来表示更大的整数。它们不受 Py_ssize_ts 值的限制。" - 这是有道理的。谢谢@user2357112 +1 和@vivek_ratnaparkhi 你引用的文字也为我澄清了一些事情。我没有使用太多Python2
,我只是想知道为什么Python3
中的int
可以容纳大于64 位无符号整数的整数,例如在C++
。是的,我只想告诉我一个事实:“int
不是原始类型,它会使用大于 64 bit unsigned integer
的字节来表示引擎盖下的整数。”。好吧,其他帖子的大多数答案都在谈论其他内容。 :-(以上是关于在 Python 中存储整数所需的字节数 [重复]的主要内容,如果未能解决你的问题,请参考以下文章