【问题标题】:Number of bytes required to store an integer in Python [duplicate]在 Python 中存储整数所需的字节数 [重复]
【发布时间】: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混在一起了,重复的似乎是对的

标签: python python-3.x


【解决方案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 的字节来表示引擎盖下的整数。”。好吧,其他帖子的大多数答案都在谈论其他内容。 :-(
猜你喜欢
  • 2021-10-17
  • 2012-12-29
  • 1970-01-01
  • 2019-01-20
  • 1970-01-01
  • 2018-10-20
  • 2020-03-19
  • 2017-03-03
相关资源
最近更新 更多