我从不同的来源读到,整数变量的大小在python中是无界的,它随着整数本身的大小而增长。关于我在这种情况下正在处理的代码,我几乎没有问题。
- 有下限吗?或者它是从1字节开始,并根据整数大小增长?
- 可以在python中将整数变量的下界或任何界限应用于此吗?
- 如果我有一个整数数组,那么每个索引可能有不同的字节数,具体取决于它所持有的整数?或者python是否保证数组中的统一大小?
醇>
我要做的是通过记录总结一个非常庞大的阵列所花费的时间来计算内存带宽,然后使用这个时间和大小的数组来粗略估计带宽。但是为了做到这一点,我需要知道从内存中读取的字节数,如果它们不统一,那么检查数组的每个单独索引是不可行的,因为数组有大约10M个索引。还有其他建议吗?
答案 0 :(得分:1)
有下限吗?或者它是从1字节开始,并根据整数大小增长?
int
是一个对象。它当然不能只有1个字节长。
可以使用sys.getsizeof(0)
在我的机器上:
>>> sys.getsizeof(0)
24
>>> sys.getsizeof(10000000000000000000000)
36
>>> sys.getsizeof(1<<31)
32
>>> sys.getsizeof(10000000000000000000000000000000000000000000)
44
在Python 2中,int
使用原生整数,直到它不可能,之后它使用long
。在Python 3中,所有内容都是long
,因此值24
是版本&amp;机器相关(32/64位),但是的下限。
对于python中的整数变量,可以将下限或任何界限应用于此吗?
下限是,如上所述,上限:否。只要有足够的内存,任何整数都可以存储在内存中。如上所示,整数越大,整数对象越大。
如果你知道你的整数可以有的最大值,那么是是的上限。
如果我有一个整数数组,那么每个索引可能有不同的字节数,具体取决于它所持有的整数?或者python是否保证数组中的大小一致?
与C数组不同,该数组包含整数的引用。因此数组大小本身很容易预测。
>>> sys.getsizeof([1000000000000000000000]*10)
144
>>> sys.getsizeof([1000000000000000000000]*20)
224
>>> sys.getsizeof([1]*20)
224
>>>
查看内部存储的值如何影响结果,但只影响数组大小?
这是因为您必须考虑每个int
对象的大小,如上所示,该对象是可变的,并且这是您预测问题的核心。
答案 1 :(得分:0)
由于注释已经声明sys.getsizof(0)= 24为您提供了下限,并且条目没有指向相同大小的对象。
但为了做到这一点,我需要知道从内存中读取的字节数 如果它们不统一,那么检查每个都是不可行的 数组的单个索引作为数组有大约10M索引。任何 备选建议?
我不认为它是不可行的,在后处理或预处理中你可以轻松地为你的largeArray做
sum([sys.getsizeof(x) for x in largeArray])
然而你应该知道,低于255的整数是单例,不使用不同的内存。