1

我有将字符串的子字符串附加到列表的函数。当输入字符串很大时

MemoryError exception

被抛出。一维列表是否有任何长度限制?如果是,我该如何扩展它?

4

4 回答 4

3

是的。有效内存。通过添加更多交换、添加更多 RAM 或迁移到具有更大内存限制的体系结构,为进程提供更多内存。

于 2013-08-09T11:24:14.690 回答
2

除了增加内存外,您还有其他几个选择。

  1. 尝试更改您的算法,以减少内存密集型。例如,如果您一次不需要所有这些子字符串,您可以使用生成器函数或生成器表达式连续创建和使用它们。
  2. 如果您需要它们,请尝试将“大字符串”保存在内存中,然后使用buffer().
  3. 如果大字符串来自文件,您可以mmap()将该文件(或其中的一部分)放入您的地址空间。
于 2013-08-09T11:41:01.750 回答
0

您可以将数据写入文件而不是将其附加到列表中。

于 2013-08-09T11:40:39.873 回答
0

您是否偶然使用了 32 位的 Python 版本?使用 64 位地址空间时,假设您有足够的可用交换空间,您的进程应该在耗尽理论上可以访问的所有内存之前很久就停止了在 32 位进程上,您只能访问大约 3 GB 的内存;按照今天的标准,没有那么多。

于 2013-08-09T12:19:21.803 回答