2017-10-28 410 views
0

我不是在寻找一个恒定的记录最大值可用int代表;我正在寻找一个int可以占用的最大内存量。请看下面的代码:我们如何获得python int占用的字节数?

import sys 

def print_and_execute(*args): 
    for s in args: 
     print(s, end = " == ") 
     r = eval(s) 
     print(r) 
    return 

print_and_execute("type(5) ")  
print_and_execute("sys.getsizeof(5)")  
i = int()  
print_and_execute("i")  
print_and_execute("sys.getsizeof(i)")  
i = 2937  
print_and_execute("i")  
print_and_execute("sys.getsizeof(i)") 
print_and_execute("sys.maxsize") 
print_and_execute("sys.getsizeof(sys.maxsize)") 

对于我特定的机器,输出结果是:

type(5) == <class 'int'> 
sys.getsizeof(5) == 28 
i == 0 
sys.getsizeof(i) == 24 
i == 2937 
sys.getsizeof(i) == 28 
sys.maxsize == 9223372036854775807 
sys.getsizeof(sys.maxsize) == 36 

显然,一些int s为24个字节长,其他都是28,还有一些人用36多少字节需要持有任何尺寸的int

+0

Python整数可以扩展到必要的大小。换句话说,上限取决于有多少内存可用。 –

+0

“一些整数是24个字节长” - 除0之外哪一个? –

回答

2

需要多少个字节来保存任何大小int

尽可能多的要求。 int s的大小没有限制,它们具有their documentation状态的任意大小。 *

sys.maxsize并不代表最大尺寸为int的对象。它是用于(在CPython中)保存索引值的Py_ssize_t的最大值。

例如,只需要创建一个更大的intmaxsize

>>> sys.getsizeof(sys.maxsize * sys.maxsize) 
44 

所以,您可以通过它使用getsizeof获得给定int的字节数。

*绑定,最终,由可用内存。