Python数组有多大?

在Python中,数组/列表可以有多大? 我需要一个约12000个元素的数组。 我仍然能够运行数组/列表方法,如sorting等?

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

PY_SSIZE_T_MAXPY_SSIZE_T_MAX中定义为((size_t) -1)>>1

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

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

只要您拥有的元素数量等于或低于此值,所有列表函数都应该正常运行。

正如Python文档所说 :

了sys.maxsize

平台的Py_ssize_ttypes支持的最大正整数,因此最大大小的列表,string,字典和许多其他容器可以有。

在我的电脑(Linux x86_64)中:

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

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

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

在我的机器上运行这些行:

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

但是,正如其他人所说的那样。 arrays越大,操作越慢。

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

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

如果你关心性能,可能需要查看NumPy这样的库。

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

Python列表实际上是作为快速随机访问的向量来实现的,所以容器将基本上保持与内存空间一样多的项目。 (列表中包含的指针需要空间,指向的对象也需要空间。)

追加是O(1) (摊销常数复杂度),然而,从序列的中间插入/删除将需要一个O(n) (线性复杂度)重新sorting,这将得到更慢的列表中的元素数。

你的sorting问题更细微,因为比较操作可能会花费无限的时间。 如果您执行的是比较慢的比较,则需要很长时间,但这不是Python列表数据types的错误 。

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

12000个元素在Python中没有任何意义……实际上,Python解释器在您的系统上拥有内存的时候,元素的数量可能会更多。

我会说,你只受到可用RAM总量的限制。 很明显,arrays越长,运行时间就越长。

列表号码没有限制。 造成你的错误的主要原因是内存。 请升级你的内存大小。