【发布时间】:2012-12-31 13:47:18
【问题描述】:
我正在编写 Python 代码来进行一些大数字计算,并且非常担心计算中使用的内存。
因此,我想计算每个变量的每一位。
比如我有一个变量x,这是一个很大的数字,想统计一下代表x的位数。
下面的代码显然没用:
x=2**1000
len(x)
因此,我转而使用以下代码:
x=2**1000
len(repr(x))
变量x是(十进制)是:
10715086071862673209484250490600018105614048117055336074437503883703510511249361224931983788156958581275946729175531468251871452856923140435984577574698574803934567774824230985421074605062371141877954182153046474983581941267398767559165543946077062914571196477686542167660429831652624386837205668069376 P>
但是上面的代码返回303
上面的long long序列的长度是302,所以我认为303应该只和字符串长度有关。
所以,我原来的问题来了:
如何知道变量x的内存大小?
还有一件事;用 C/C++ 语言,如果我定义的话
int z=1;
这意味着为z分配了4个字节= 32位,位排列为00..001(31个0和一个1)。
这里,我的变量x很大,不知道它是否遵循同样的内存分配规则?
【问题讨论】:
-
刚刚发现 sys.getsizeof(x) 好像有用?我用的是sys.getsizeof(x),其中x=2**1000,这样的指令返回160。这是否意味着x占用160字节?还是实际上是 160 位?
-
除非您处理的是极低级别的硬件实现,否则没有人可以用比特来衡量任何东西。对于大多数意图和目的而言,最低的计算单元是
byte。