我们如何获得python int占用的字节数?

时间:2017-10-28 18:43:42

标签: python python-3.x int size sizeof

我不是在寻找一个用int表示的最大值的恒定记录;我希望找出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是24个字节长,有些是28个,还有一些是36个。需要多少个字节来保存任意大小的int

1 个答案:

答案 0 :(得分:2)

  

保持任何大小int需要多少字节?

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

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

例如,只需创建比int更大的maxsize

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

因此,您可以使用int获取给定getsizeof的字节数。

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