Python数组有多大?
在Python中,数组/列表可以有多大? 我需要一个约12000个元素的数组。 我仍然能够运行数组/列表方法,如sorting等?
根据源代码 ,列表的最大大小是PY_SSIZE_T_MAX/sizeof(PyObject*)
。
PY_SSIZE_T_MAX
在PY_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越长,运行时间就越长。
列表号码没有限制。 造成你的错误的主要原因是内存。 请升级你的内存大小。