当前位置: 首页 > 面试题库 >

为什么带有列表`append()`的Python`Memory Error`剩余大量RAM

贺皓
2023-03-14
问题内容

我正在根据一组文本文件构建大型数据字典。当我阅读这些行并对其进行处理时,我append(dataline)会列出一个清单。

在某些时候,会append()产生Memory Error异常。但是,看着崩溃时在Windows Task Manager中运行的程序,我看到4.3
GB可用空间和1.1 GB可用空间。

因此,我不理解例外的原因。

Python版本是2.6.6。我猜,唯一的原因是它无法使用更多的可用RAM。如果是这样,是否有可能增加拨款?


问题答案:

如果您使用的是32位版本的Python,则可能要尝试使用64位版本。

一个进程使用32位地址最多可以寻址4GB的RAM,但是通常情况下(取决于操作系统),获取的空间要少得多。听起来您的Python进程可能已达到此极限。64位寻址消除了此限制。

编辑
由于您询问的是Windows,因此以下页面具有相关性:Windows版本的内存限制。如您所见,每个32位进程的限制为2、3或4GB,具体取决于操作系统版本和配置



 类似资料:
  • 问题内容: 在Python中将list with转换为list with的最简单方法是什么?例如,我们必须转换为。当然,我们可以使用循环,但这太简单了。 问题答案: Python 2.x: Python 3.x(在3.x中,返回迭代器,而不是在2.x中的列表): 资料:2.6,3.1

  • 问题内容: 有谁知道为什么不调用Python的函数,因为已经有一个可以删除并返回最后一个元素(索引为-1)并且语义与该用法一致的原因? 问题答案: 因为“ append”早在想到“ pop”之前就已存在。受Python 0.9.1 支持的list.append于1991年初。通过比较,这是在comp.lang.python上讨论的有关在1997年添加pop的一部分。Guido写道: 为了实现一个堆

  • 问题内容: 为什么这项工作有效- 但这不是- 第二种情况下的输出为。你能解释一下输出吗? 问题答案: 该方法没有返回值。它会在适当的位置更改列表,并且由于您没有将分配给任何变量,因此只是“迷失在空间” 我没有重载所有有问题的方法,但是概念应该很清楚。

  • 求教做了一道OJ题目,调试发现ans的格式是ans: [[[0, 0], [0, 1], [0, 2], [0, 3]], [[0, 0], [0, 1], [0, 2], [1, 2]]] 为什么明明每次执行dfs的都是同级别的对path的append操作,会产生两个大的list. 和预期的每个都是独立元素的list不一致ans: [[0, 0], [0, 1], [0, 2], [0, 3],

  • 问题内容: 不确定此问题是否特定于该语言以及如何在中实现。 问题答案: append是一种变异(破坏性)操作(它会在适当位置修改列表,而不是返回新列表)。进行无损等效的惯用方式append是 回答你的问题,我的猜测是,如果返回新修改的列表,用户可能会认为它是非破坏性的,即他们可能会编写如下代码 并期望成为

  • 问题内容: 列表方法append()和之间有什么区别extend()? 问题答案: 5111 在末尾追加对象。 给你: 通过添加来自的元素来扩展列表。 给你: