【发布时间】:2015-12-01 12:10:50
【问题描述】:
我使用了%memit 魔术函数来测量内存使用情况:
In [1]: %memit n = pow(10, 7); range(n)
peak memory: 568 MiB, increment: 272 MiB
In [2]: %memit n = pow(10, 7); set(xrange(n))
peak memory: 824 MiB, increment: 447 MiB
好的,所以似乎有一个中间步骤,xrange(n) 被实例化为一个完整列表。但是如果我将我的列表分成 10 个子列表,然后将它们一一合并呢?这样会更节省内存,对吧?
In [3]: %memit n = pow(10, 7); reduce(set.union, (set(xrange(p, n, 10)) for p in range(10)))
peak memory: 1260 MiB, increment: 897 MiB
嗯,这并没有按预期进行。为什么reduce 方法比set(xrange(n)) 消耗更多内存?
【问题讨论】:
-
相关问题:stackoverflow.com/questions/15198042/… 注意
set.union将使用 more 内存,如果参数是一个集合,因为它假定公共元素很少,因此它将分配双倍所需的内存。
标签: python python-2.7 memory set