如何计算变量的内存大小(Python)?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (697)

我想计算每一个变量的每一点。

例如,我有一个变量X,它是一个很大的数字,并且希望计算用于表示的位数。

以下代码显然毫无用处:

x=2**1000
len(x)

因此,我转而使用以下代码:

x=2**1000
len(repr(x))

用C/C++语言,如果我定义

int z=1;

这意味着有4个字节=32位分配给Z,位元排列为...001(31 0和1 1)。

在这里,我的变量X是巨大的,我不知道它是否遵循相同的内存分配规则?

提问于
用户回答回答于

关于PythonLong的内部结构,请检查sys.int[医]信息(或sys.long)[医]Python 2.7的信息)。

>>> import sys
>>> sys.int_info
sys.int_info(bits_per_digit=30, sizeof_digit=4)

Python要么将30位存储到4个字节(大多数64位系统),要么将15位存储为2个字节(大多数32位系统)。将实际内存使用情况与计算值进行比较,我得到

>>> import math, sys
>>> a=0
>>> sys.getsizeof(a)
24
>>> a=2**100
>>> sys.getsizeof(a)
40
>>> a=2**1000
>>> sys.getsizeof(a)
160
>>> 24+4*math.ceil(100/30)
40
>>> 24+4*math.ceil(1000/30)
160

由于没有存储位,所以0有24字节的开销。较大值的内存要求与计算值相匹配。

如果您的数字太大,那么您可能应该查看gmpy 2库

用户回答回答于

使用sys.getsizeof若要获取对象的大小(以字节为单位),请执行以下操作。

>>> from sys import getsizeof
>>> a = 42
>>> getsizeof(a)
12
>>> a = 2**1000
>>> getsizeof(a)
146
>>>

注意,对象的大小和布局纯粹是特定于实现的。例如,CPython可能使用与IronPython完全不同的内部数据结构。因此,对象的大小可能因实现而异。

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励