Web上有各种片段,可以为您提供从字节大小返回人类可读大小的功能:
>>> human_readable(2048)
'2 kilobytes'
>>>
Run Code Online (Sandbox Code Playgroud)
但是有没有提供这个的Python库?
我正在寻找一种简单的方法来了解数组和字典对象的字节大小,比如
[ [1,2,3], [4,5,6] ] or { 1:{2:2} }
Run Code Online (Sandbox Code Playgroud)
很多主题都说使用pylab,例如:
from pylab import *
A = array( [ [1,2,3], [4,5,6] ] )
A.nbytes
24
Run Code Online (Sandbox Code Playgroud)
但是,字典怎么样?我看到很多答案建议使用pysize或heapy.Torsten Marek在此链接中给出了一个简单的答案:建议使用哪种Python内存分析器?,但我对输出没有明确的解释,因为字节数不匹配.
Pysize似乎更复杂,我还没有明确如何使用它.
鉴于我想要执行的大小计算的简单性(没有类或复杂的结构),任何关于如何简单估计这种对象的内存使用量的想法?
亲切的问候.
我目前正在 kaggle 中开发 jupyter notebook。在我的 numpy 数组上执行所需的转换后,我对其进行了腌制,以便将其存储在磁盘上。我这样做的原因是我可以释放大数组消耗的内存。
酸洗阵列后消耗的内存约为 8.7 GB。
我决定运行此代码通过@扬GLX代码段中提供在这里,找出变量占用我的记忆:
import sys
def sizeof_fmt(num, suffix='B'):
''' by Fred Cirera, /sf/answers/76645341/, modified'''
for unit in ['','Ki','Mi','Gi','Ti','Pi','Ei','Zi']:
if abs(num) < 1024.0:
return "%3.1f %s%s" % (num, unit, suffix)
num /= 1024.0
return "%.1f %s%s" % (num, 'Yi', suffix)
for name, size in sorted(((name, sys.getsizeof(value)) for name, value in locals().items()),
key= lambda x: -x[1])[:10]:
print("{:>30}: {:>8}".format(name, sizeof_fmt(size)))
Run Code Online (Sandbox Code Playgroud)
执行此步骤后,我注意到数组的大小为 3.3 gb,所有其他变量的大小加在一起约为 0.1 gb。
我决定通过执行以下操作来删除数组并查看是否可以解决问题:
del my_array
gc.collect()
Run Code Online (Sandbox Code Playgroud)
这样做之后,内存消耗从 8.7 GB 减少到 …