python - 为什么嵌套列表会在 Ubuntu 14.04 上泄漏内存?
问题描述
运行时出现“高水位”内存泄漏行为:
import gc
temp = [[0.1] for _ in xrange(10 ** 7)]
del temp
gc.collect()
常驻内存从约 7 MB 开始攀升至约 1000 MB,然后稳定在约 312 MB。后续运行不会增加超过 312 MB 的内存泄漏。为什么会发生这种情况,是否有任何已知的解决方法?
各种观察:
- 它发生在 Ubuntu 14.04 上,但不在 OSX 上
- 它不会发生在python3中
[[] for _ in xrange(10 ** 7)]
不泄漏_[0.1 for _ in xrange(10 ** 7)]
不泄漏_[(0.1,) for _ in xrange(10 ** 7)]
不泄漏_[0.1 for _ in xrange(10 ** 7)]
不泄漏_{random.random(): {0.1: 0.1} for _ in xrange(10 ** 7)}
确实泄漏- 一次清除单个列表无济于事
- 在 python shell 和文件中运行似乎没有影响
- 我在 python 版本中重现了该行为:2.7.15、2.7.14、2.7.11 和 2.7.5
我的第一个直觉是,这是由于竞技场没有清理干净造成的。但这没有意义,因为我希望有同样的行为,[0.1 for _ in xrange(10 ** 7)]
但那不会发生。
为什么嵌套列表/字典会导致这种高水位线行为?
我主要使用测量常驻内存htop
解决方案
推荐阅读
- c++ - 处理/防止非 UWP Win32 应用程序在 Windows 10 中挂起
- javascript - 如何修复 div 容器大小以及以 3 个点显示的额外内容
- facebook - 从活跃的活动 Facebook 获取所有广告帖子
- sql-server - 如何在 Combobox vb.net SQL Server 中显示列结果
- python - 如何从 Python 列表中删除括号?
- php - [] 在 PHP 中创建什么样的对象?
- android - AppCompat/Support 26.1.0 中的库与 AndroidX 之间的兼容性
- javascript - 从rs值mysql php匹配颜色图表
- excel - 没有 Power Query/Get 和 Transform 的 Excel 版本是否可以访问 QueryTable 对象模型?
- android - 导航组件参数默认值