Python 如何管理 int 和 long?

2025-02-27 09:05:00
admin
原创
92
摘要:问题描述:有人知道 Python 内部如何管理 int 和 long 类型吗?它是否动态地选择正确的类型?int 的极限是多少?我正在使用 Python 2.6,它与以前的版本有什么不同?我该如何理解下面的代码?>>> print type(65535) <type 'int'>...

问题描述:

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

  • 它是否动态地选择正确的类型?

  • int 的极限是多少?

  • 我正在使用 Python 2.6,它与以前的版本有什么不同?

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

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

更新:

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

解决方案 1:

int并在几个版本之前long被“统一” 。在此之前,可以通过数学运算溢出 int。

3.x 进一步推进了这一点,完全消除了 long 并且只保留 int。

  • Python 2sys.maxint包含 Python int 可以容纳的最大值。

+ 在 64 位 Python 2.7 上,大小为 24 字节。使用 检查`sys.getsizeof()`。
  • Python 3sys.maxsize包含 Python int 的最大大小(以字节为单位)。

+ 在 32 位中为 GB,在 64 位中为 EB。
+ 如此大的 int 会具有类似于 8 的幂的值`sys.maxsize`。

解决方案 2:

这个PEP应该会有帮助。

最重要的是,你真的不必担心 Python 版本 > 2.4

解决方案 3:

Python 2 将根据值的大小自动设置类型。最大值的指南可在下面找到。

Python 2 中默认 Int 的最大值是 65535,任何大于该值的值都将是一个 long

例如:

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

在 Python 3 中,long 数据类型已被删除,所有整数值均由 Int 类处理。Int 的默认大小取决于您的 CPU 架构。

例如:

  • 32 位系统整数的默认数据类型为“Int32”

  • 64 位系统整数的默认数据类型为“Int64”

每种类型的最小/最大值如下:

  • Int8:[-128,127]

  • Int16:[-32768,32767]

  • Int32:[-2147483648,2147483647]

  • Int64:[-9223372036854775808,9223372036854775807]

  • Int128:[-170141183460469231731687303715884105728,170141183460469231731687303715884105727]

  • UInt8:[0,255]

  • UInt16:[0,65535]

  • UInt32:[0,4294967295]

  • UInt64:[0,18446744073709551615]

  • UInt128:[0,340282366920938463463374607431768211455]

如果您的 Int 的大小超出上述限制,python 将自动更改其类型并分配更多内存来处理最小/最大值的增加。在 Python 2 中,它会转换为“long”,现在它只是转换为下一个大小的 Int。

例如:如果您使用的是 32 位操作系统,则默认情况下 Int 的最大值将为 2147483647。如果分配的值等于或大于 2147483648,则类型将更改为 Int64。

<class 'int'>有多种方法来检查 int 的大小及其内存分配。注意:在 Python 3 中,无论您使用什么大小的 Int,使用内置的 type() 方法都会始终返回。

解决方案 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 位的值,但对于任何更大的值,它会自动切换到 long(任意大的位数 - 即 bignums)。我猜这可以加快较小值的速度,同时通过无缝过渡到 bignums 来避免任何溢出。

解决方案 5:

很有趣。在我的 64 位 (i7 Ubuntu) 机器上:

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

猜测它在更大的机器上会升级到 64 位整数。

解决方案 6:

Python 2.7.9 自动提升数字。对于不确定使用 int() 还是 long() 的情况。

>>> a = int("123")
>>> type(a)
<type 'int'>
>>> a = int("111111111111111111111111111111111111111111111111111")
>>> type(a)
<type 'long'>

解决方案 7:

从 python 3.x 开始,统一整数库比旧版本更加智能。在我的(i7 Ubuntu)机器上,我得到了以下内容,

>>> type(math.factorial(30))
<class 'int'>

有关实现细节,请参阅Include/longintrepr.h, Objects/longobject.c and Modules/mathmodule.c文件。最后一个文件是动态模块(编译为 so 文件)。代码注释得很好,可以理解。

解决方案 8:

它管理它们,因为intlong是兄弟类定义。它们具有适当的 +、-、*、/ 等方法,这些方法将产生适当类的结果。

例如

>>> a=1<<30
>>> type(a)
<type 'int'>
>>> b=a*2
>>> type(b)
<type 'long'>

在这种情况下,该类int有一个__mul__方法(实现*的方法),它long在需要时创建一个结果。

解决方案 9:

继续回答这里给出的所有问题,特别是@James Lanes

整数类型的大小可以用以下公式表示:

总范围 = (2^位系统)

下限 = -(2 ^ 位系统)0.5 上限 = ((2 ^ 位系统)0.5) - 1

相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   3878  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   2714  
  本文介绍了以下10款项目管理软件工具:禅道项目管理软件、Freshdesk、ClickUp、nTask、Hubstaff、Plutio、Productive、Targa、Bonsai、Wrike。在当今快速变化的商业环境中,项目管理已成为企业成功的关键因素之一。然而,许多企业在项目管理过程中面临着诸多痛点,如任务分配不...
项目管理系统   47  
  本文介绍了以下10款项目管理软件工具:禅道项目管理软件、Monday、TeamGantt、Filestage、Chanty、Visor、Smartsheet、Productive、Quire、Planview。在当今快速变化的商业环境中,项目管理已成为企业成功的关键因素之一。然而,许多项目经理和团队在管理复杂项目时,常...
开源项目管理工具   48  
  本文介绍了以下10款项目管理软件工具:禅道项目管理软件、Smartsheet、GanttPRO、Backlog、Visor、ResourceGuru、Productive、Xebrio、Hive、Quire。在当今快节奏的商业环境中,项目管理已成为企业成功的关键因素之一。然而,许多企业在选择项目管理工具时常常面临困惑:...
项目管理系统   48  
热门文章
项目管理软件有哪些?
曾咪二维码

扫码咨询,免费领取项目管理大礼包!

云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用