为了账号安全,请及时绑定邮箱和手机立即绑定

Python如何管理int和long?

/ 猿问

Python如何管理int和long?

海绵宝宝撒 2019-11-15 12:56:48

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


它会动态选择合适的类型吗?

一个整数的限制是多少?

我正在使用Python 2.6,与以前的版本有所不同吗?

我应该如何理解以下代码?


>>> print type(65535)

<type 'int'>

>>> print type(65536*65536)

<type 'long'>

更新:


>>> print type(0x7fffffff)

<type 'int'>

>>> print type(0x80000000)

<type 'long'>


查看完整描述

3 回答

?
慕雪6442864

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

3.x通过完全消除long并仅具有int来进一步提高了此功能。

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

    • 在64位Python 2.7上,大小为24个字节。用检查sys.getsizeof()

  • Python 3sys.maxsize包含Python int可以达到的最大字节数。

    • 这将是32位的千兆字节和64位的EB。

    • 如此大的int值将等于8的幂sys.maxsize


查看完整回答
反对 回复 2019-11-15
?
幕布斯6054654

在我的机器上:


>>> print type(1<<30)

<type 'int'>

>>> print type(1<<31)

<type 'long'>

>>> print type(0x7FFFFFFF)

<type 'int'>

>>> print type(0x7FFFFFFF+1)

<type 'long'>

Python使用整数(32位有符号整数,我不知道它们是否是C整数)适合适合32位的值,但是对于任何东西,它都会自动切换为长整数(任意大的位数,即bignums)更大。我猜想这将加快速度以实现较小的值,同时通过无缝过渡到bignum避免任何溢出。


查看完整回答
反对 回复 2019-11-15
?
白板的微信

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


Python 2中默认Int的Max值为65535,任何高于此值的值都将很长


例如:


>> print type(65535)

<type 'int'>

>>> print type(65536*65536)

<type 'long'>

在Python 3中,长数据类型已被删除,所有整数值都由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,340282366920938938463463374607431768211455]

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


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


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


查看完整回答
反对 回复 2019-11-15

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信