Python语句使用过多的RAM

时间:2010-10-31 19:48:02

标签: python memory-management

这个简单的陈述:

zip(xrange(0, 11614321), xrange(0, 11627964))

...吃掉了我的大部分内存。 (> 150 MiB!)为什么?

编辑:啊,重新阅读文档,我看到zip会返回一个列表,而不是一个可迭代的列表。像zip那样返回可迭代的东西吗?


更大的图片:我正在迭代两个大的文件数据数组,我正在做迭代(0端,0端),(0端,1端)等等。我想不对数组进行切片,因为它会导致过多的内存分配。我想我只是迭代索引,但这似乎不起作用,如上所述。整个代码:

def subsequence_length(data_a, data_b, loc_a, loc_b):
    length = 0
    for i_a, i_b in zip(xrange(loc_a, len(data_a)), xrange(loc_b, len(data_b))):
        if data_a[i_a] == data_b[i_b]:
            length += 1
        else:
            break
    return length

2 个答案:

答案 0 :(得分:12)

使用itertools中的izip

答案 1 :(得分:3)

如果由于某种原因你不想使用itertools模块,那么编写自己的迭代器就可以做同样的事情,至少如果你知道你正在处理两个输入那么迭代器。

def xzip2(i1, i2):
    i1, i2 = iter(i1), iter(i2)
    while True:
        yield next(i1), next(i2)

实际上,经过进一步反思,使其与任意数量的迭代器一起工作并不困难。我相当肯定itertools.izip必须实现这样的东西。

def xzip(*iters):
    iters = [iter(i) for i in iters]
    while True:
        yield tuple([next(i) for i in iters])

(看the documentation,我看到了,除非他们使用的是map而不是列表推导。)

相关问题