Python如何管理int和long?

2024-05-01 01:46:14 发布

您现在位置:Python中文网/ 问答频道 /正文

有人知道Python如何在内部管理int和long类型吗?

  • 它是否动态地选择了正确的类型?
  • 智力的极限是多少?
  • 我使用的是Python2.6,与以前的版本不同吗?

我应该如何理解下面的代码?

>>> print type(65535)
<type 'int'>
>>> print type(65536*65536)
<type 'long'>

更新:

>>> print type(0x7fffffff)
<type 'int'>
>>> print type(0x80000000)
<type 'long'>

Tags: 代码版本类型type动态longintprint
3条回答

intlong是“统一的”a few versions back。在此之前,可以通过数学运算使int溢出。

3.x通过完全消除long并只使用int进一步推进了这一点

  • Python 2^{}包含Python int可以容纳的最大值。
    • 在64位Python2.7上,大小为24字节。用sys.getsizeof()检查。
  • Python 3^{}包含Python int可以达到的最大字节数。
    • 32位是千兆字节,64位是千兆字节。
    • 如此大的int值与8的幂sys.maxsize类似。

这个PEP应该有用。

总之,在python版本中,您不必担心它>;2.4

在我的机器上:

>>> print type(1<<30)
<type 'int'>
>>> print type(1<<31)
<type 'long'>
>>> print type(0x7FFFFFFF)
<type 'int'>
>>> print type(0x7FFFFFFF+1)
<type 'long'>

Python使用int(32位有符号整数,我不知道它们是否是隐藏的C int)来表示适合32位的值,但是对于更大的值,Python会自动切换到long(任意大量的位,即bignum)。我猜这会加快较小值的速度,同时通过无缝转换到bignum来避免任何溢出。

相关问题 更多 >