APP下载

你使用的Python对象占用了多少内存?(下)

2019-09-10

电脑报 2019年29期
关键词:实例内存对象

现在,100X的内存有可能被毫无用处地困在你的程序里,永远不会被再次利用,而且也拒绝被系统分配给其他程序。更具讽刺意味的是,如果你使用处理模块来运行程序的多个实例,那么就会严重限制你在给定计算机上可以运行的实例数。

内存剖析

想要衡量和测量程序的实际内存使用情况,可以使用memory_profiler模块。我尝试了一下,不确定所得出的结果是否可信。它使用起来非常简单。你装饰一个函数(可能是@profiler装饰器的主函数0函数),当程序退出时,内存分析器会打印出一份标准输出的简洁报告,显示每行的总内存和内存变化。

memory_profiler

https://pypi.python.org/pypi/memory_profiler

```python from memory_profiler import profile

@profile def main(): a = [] b = [] c = [] for i in range(100000): a.append(5) for i in range(100000): b.append(300) for i in range(100000): c.append('1234567890123

45678901234567890') del a del b del c

print ‘Done!’ if __name__ == '__main__':

main() ```

Here is the output:

Line # Mem usage Increment Line Contents

================================================

3 22.9 MiB 0.0 MiB @profile

4 def main():

如你所见,这里的内存开销是22.9MB。在【-5,256】范围内外添加整数和添加字符串时内存不增加的原因是在所有情况下都使用单个对象。目前尚不清楚为什么第8行的第一个range(1000)循环增加了4.2MB,而第10行的第二个循环只增加了0.4MB,第12行的第三个循环增加了0.8MB。最后,当删除a、b和c列表时,为a和c释放了0.6MB,但是为b添加了0.2MB。对于这些结果我并不是特别理解。

总结

Python为它的对象使用了大量内存,也使用了各种技巧和优化方式来进行内存管理。通过跟踪对象的内存使用情况并了解内存管理模型,可以显著减少程序的内存占用。

学习Python,无论你是刚入门的新手还是经验丰富的编码人员,都可以使用我們的完整Python教程指南来学习。

猜你喜欢

实例内存对象
隐超DDR5 5600AOFRUS DDFR55200 16GBx2内存套装实战
晒晒全国优秀县委书记拟推荐对象
笔记本内存已经在涨价了,但幅度不大,升级扩容无须等待
攻略对象的心思好难猜
图说车事
内存搭配DDR4、DDR3L还是DDR3?
个性签名
完形填空Ⅱ
完形填空Ⅰ
上网本为什么只有1GB?