How does Python manage int and long?
有没有人知道Python如何管理内部int和long类型?
- 它是否动态选择正确的类型?
- int的限制是什么?
- 我使用的是Python 2.6,与以前的版本有什么不同?
我该如何理解下面的代码?
1 2 3 4 | >>> print type(65535) <type 'int'> >>> print type(65536*65536) <type 'long'> |
更新:
1 2 3 4 | >>> print type(0x7fffffff) <type 'int'> >>> print type(0x80000000) <type 'long'> |
3.x通过完全消除long并且只有int来进一步提高了这一点。
-
Python 2:
sys.maxint 包含Python int可以容纳的最大值。-
在64位Python 2.7上,大小为24字节。检查
sys.getsizeof() 。
-
在64位Python 2.7上,大小为24字节。检查
-
Python 3:
sys.maxsize 包含Python int的最大大小(以字节为单位)。- 这将是32位的千兆字节,64位的艾字节。
-
这样大的int将具有类似于
sys.maxsize 的幂的8的值。
这个PEP应该有所帮助。
底线是你真的不应该在python版本> 2.4中担心它
在我的机器上:
1 2 3 4 5 6 7 8 | >>> print type(1<<30) <type 'int'> >>> print type(1<<31) <type 'long'> >>> print type(0x7FFFFFFF) <type 'int'> >>> print type(0x7FFFFFFF+1) <type 'long'> |
对于适合32位的值,Python使用整数(32位有符号整数,我不知道它们是否为引擎盖下的C ints),但是对于任何东西都会自动切换为long(任意大量的位 - 即bignums)大。我猜这可以加速更小的值,同时避免任何溢出,无缝过渡到bignums。
Python 2.7.9自动提升数字。
对于不确定使用int()或long()的情况。
1 2 3 4 5 6 | >>> a = int("123") >>> type(a) <type 'int'> >>> a = int("111111111111111111111111111111111111111111111111111") >>> type(a) <type 'long'> |
有趣。在我的64位(i7 Ubuntu)框中:
1 2 3 4 | >>> print type(0x7FFFFFFF) <type 'int'> >>> print type(0x7FFFFFFF+1) <type 'int'> |
猜猜它在更大的机器上可以达到64位整数。
Python 2将根据值的大小自动设置类型。最大值的指南可以在下面找到。
Python 2中默认Int的Max值为65535,高于此值的任何值都将为long
例如:
1 2 3 4 | >> 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将自动更改它的类型并分配更多内存来处理min / max值的增加。在Python 2中,它将转换为'long',现在它只是转换为Int的下一个大小。
示例:如果您使用的是32位操作系统,则默认情况下,Int的最大值将为2147483647。如果指定了值2147483648或更高,则类型将更改为Int64。
有不同的方法来检查int的大小及其内存分配。
注意:在Python 3中,使用内置的type()方法将始终返回
只是为了继续这里给出的所有答案,特别是@James Lanes
整数类型的大小可以用这个公式表示:
总范围=(2 ^位系统)
下限= - (2 ^位系统)* 0.5
上限=((2 ^位系统)* 0.5) - 1
从python 3.x开始,统一整数库比旧版本更加智能。在我的(i7 Ubuntu)盒子上,我得到了以下内容,
1 2 | >>> type(math.factorial(30)) <class 'int'> |
有关实现的详细信息,请参阅
从Python 3.x开始,所有整数值都是Int类的一部分。 整数大小现在取决于CPU架构。
它管理它们,因为
例如
1 2 3 4 5 6 | >>> a=1<<30 >>> type(a) <type 'int'> >>> b=a*2 >>> type(b) <type 'long'> |
在这种情况下,类