Python如何管理int和long?
有没有人知道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'>
9 个回答
14
在Python 2中,程序会根据数值的大小自动设置数据类型。下面是一些最大值的参考。
Python 2中默认的整数类型最大值是65535,超过这个值就会变成长整型(long)。
举个例子:
>> print type(65535)
<type 'int'>
>>> print type(65536*65536)
<type 'long'>
在Python 3中,长整型这个数据类型被去掉了,所有的整数值都用整型(Int)来处理。整型的默认大小会根据你的电脑处理器架构来决定。
比如:
- 在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]
如果你的整型数值超过了上面提到的限制,Python会自动改变它的数据类型,并分配更多的内存来处理这个增加的最小值和最大值。在Python 2中,它会转换成'long',而在Python 3中,它会转换成下一个大小的整型。
举个例子:如果你使用的是32位操作系统,整型的最大值默认是2147483647。如果你赋值2147483648或更大的数,类型就会变成Int64。
有不同的方法可以检查整型的大小和内存分配情况。注意:在Python 3中,使用内置的type()方法无论你使用什么大小的整型,都会返回<class 'int'>
。
25
这个 PEP 应该会对你有帮助。
简单来说,在 Python 2.4 之后的版本,你其实不需要太担心这个问题。
171
int
和 long
在之前的几个版本中被“统一”了。以前,使用数学运算时,int
类型可能会溢出。
在 Python 3.x 中,进一步简化了这个问题,完全去掉了 long
,现在只有 int
这一种类型。
- Python 2:
sys.maxint
表示 Python 中int
能够存储的最大值。- 在 64 位的 Python 2.7 中,
int
的大小是 24 字节。可以用sys.getsizeof()
来查看。
- 在 64 位的 Python 2.7 中,
- Python 3:
sys.maxsize
表示 Python 中int
能够占用的最大字节数。- 在 32 位系统中,这个值会是几千兆字节,而在 64 位系统中则会达到几亿亿字节。
- 这么大的
int
值大约相当于 8 的sys.maxsize
次方。