有没有人知道Python如何管理内部int和long类型?
我该如何理解下面的代码?
>>> print type(65535)
<type 'int'>
>>> print type(65536*65536)
<type 'long'>
Run Code Online (Sandbox Code Playgroud)
更新:
>>> print type(0x7fffffff)
<type 'int'>
>>> print type(0x80000000)
<type 'long'>
Run Code Online (Sandbox Code Playgroud)
Ign*_*ams 111
int并且long"统一" 了几个版本.在此之前,可以通过数学运算溢出int.
3.x通过完全消除int并且只有很长时间来进一步提高它.
sys.maxint包含Python int可以容纳的最大值.
sys.getsizeof().sys.maxsize包含Python int可以的最大字节数.
sys.maxsize.小智 6
Python 2 将根据值的大小自动设置类型。最大值指南可以在下面找到。
Python 2 中默认 Int 的 Max 值为 65535,高于此值的任何值都会很长
例如:
>> print type(65535)
<type 'int'>
>>> print type(65536*65536)
<type 'long'>
Run Code Online (Sandbox Code Playgroud)
在 Python 3 中,long 数据类型已被删除,所有整数值都由 Int 类处理。Int 的默认大小取决于您的 CPU 架构。
例如:
可以在下面找到每种类型的最小值/最大值:
如果 Int 的大小超过上述限制,python 将自动更改它的类型并分配更多内存来处理这种最小值/最大值的增加。在 Python 2 中,它会转换为“long”,现在它只是转换为 Int 的下一个大小。
示例:如果您使用的是 32 位操作系统,默认情况下 Int 的最大值将为 2147483647。如果分配了 2147483648 或更大的值,则类型将更改为 Int64。
有多种方法可以检查 int 的大小及其内存分配。注意:在 Python 3 中,<class 'int'>无论您使用什么大小的 Int ,使用内置的 type() 方法都将始终返回。
在我的机器上:
>>> print type(1<<30)
<type 'int'>
>>> print type(1<<31)
<type 'long'>
>>> print type(0x7FFFFFFF)
<type 'int'>
>>> print type(0x7FFFFFFF+1)
<type 'long'>
Run Code Online (Sandbox Code Playgroud)
Python使用整数(32位有符号整数,我不知道它们是否是C整数)适合适合32位的值,但是对于任何东西,它都会自动切换为长整数(任意大的位数,即bignums)更大。我猜想这将加快速度以实现较小的值,同时通过无缝过渡到bignum避免任何溢出。