Python 列表能有多大?

在 Python 中,列表能有多大?我需要一个大约12000个元素的列表。我是否仍然可以运行诸如排序等列表方法?

215515 次浏览

12000个元素在 Python 中不算什么... ... 实际上,只要 Python 解释器在系统中有内存,元素的数量就可以达到这个程度。

我会说,您只受到可用内存总量的限制。显然,数组越大,操作时间越长。

当然可以。实际上你可以很容易地看到:

l = range(12000)
l = sorted(l, reverse=True)

在我的机器上运行这些线路需要:

real    0m0.036s
user    0m0.024s
sys  0m0.004s

但正如其他人所说的那样,数组越大,运算速度就越慢。

在随意代码中,我创建了包含数百万个元素的列表。我相信 Python 的列表实现只受系统内存量的限制。

此外,列表方法/函数应该继续工作,尽管列表的大小。

如果您关心性能,那么研究一下诸如 笨蛋之类的库可能是值得的。

根据 源代码,列表的最大大小是 PY_SSIZE_T_MAX/sizeof(PyObject*)

PY_SSIZE_T_MAX皮波特中定义为 ((size_t) -1)>>1

在常规的32位系统上,这是(4294967295/2)/4或536870912。

因此,32位系统上的 python 列表的最大大小是 536,870,912元素。

只要您拥有的元素数量等于或低于此值,所有列表函数都应该能够正确操作。

在 Effbot 上描述了列表 的性能特征。

Python 列表实际上是作为快速随机访问的向量实现的,因此容器基本上只要内存中有足够的空间就可以容纳尽可能多的项。(列表中包含的指针需要空间,被指向的对象也需要内存中的空间。)

附加是 O(1)(分摊常数复杂度) ,然而,从序列中间插入/删除将需要一个 O(n)(线性复杂度)重新排序,随着列表中元素数量的减少,这将变得更慢。

您的排序问题更加微妙,因为比较操作可能需要无限长的时间。如果执行的比较非常缓慢,那么将花费很长时间,尽管这不是 Python 的列表数据类型的错误。

反转只需要交换列表中所有指针所需的时间(必须是 O(n)(线性复杂度) ,因为您只触摸每个指针一次)。

作为 Python 文档说:

Sys.maxsize

平台的 Py _ ssize _ t 类型支持的最大正整数,因此最大大小列表、字符串、字母表和许多其他容器可以具有。

在我的电脑里(Linux x86 _ 64) :

>>> import sys
>>> print sys.maxsize
9223372036854775807

没有列表号的限制。 导致错误的主要原因是 RAM。 请升级内存大小。

我在 x64位系统上找到了这个: Python 3.7.0 b5(v3.7.0 b5: abb8802389,May 312018,01:54:01)[ MSC v. 191364 bit (AMD64)] on win32

enter image description here

它因不同的系统而异(取决于 RAM)

进口6号 6号,最大号 9223372036854775807 根据 < a href = “ https://pythonhosted.org/six/# six. MAXSIZE”rel = “ noReferrer”> 文档,这也给出了 listdict的最大大小