问题:Python列表可以有多大?
在Python中,列表可以有多大?我需要大约12000个元素的列表。我仍然可以运行列表方法(例如排序等)吗?
回答 0
根据源代码,列表的最大大小为PY_SSIZE_T_MAX/sizeof(PyObject*)
。
PY_SSIZE_T_MAX
在pyport.h中定义为((size_t) -1)>>1
在常规的32位系统上,这是(4294967295/2)/ 4或536870912。
因此,在32位系统上,python列表的最大大小为536,870,912个元素。
只要您拥有的元素数量等于或小于此数量,所有列表函数都应正确运行。
回答 1
sys.maxsize
平台的Py_ssize_t类型支持的最大正整数,因此列表,字符串,字典和许多其他容器可以具有的最大大小。
在我的计算机(Linux x86_64)中:
>>> import sys
>>> print sys.maxsize
9223372036854775807
回答 2
当然可以。实际上,您可以轻松地自己看到:
l = range(12000)
l = sorted(l, reverse=True)
在我的机器上运行这些行需要:
real 0m0.036s
user 0m0.024s
sys 0m0.004s
但是可以肯定,正如其他人所说。数组越大,操作将越慢。
回答 3
在临时代码中,我创建了包含数百万个元素的列表。我相信Python的列表实现仅受系统上内存量的限制。
此外,尽管列表很大,但列表方法/函数仍应继续工作。
如果您关心性能,那么值得研究一下NumPy之类的库。
回答 4
Python列表实际上是作为用于快速随机访问的向量实现的,因此容器基本上将容纳与内存中的空间一样多的项目。(您需要用于列表中包含的指针的空间以及在内存中用于指向的对象的空间。)
追加是O(1)
(摊销的恒定复杂度),但是,插入/从序列中间删除将需要O(n)
(线性复杂度)重新排序,这将随着列表中元素数量的增加而变慢。
您的排序问题更加细微,因为比较操作可能会花费无数的时间。如果您执行的比较缓慢,则需要花费很长时间,尽管这不是Python的list数据类型的错。
反转只需要交换列表中所有指针所需的时间O(n)
(由于触摸每个指针一次,所以有必要(线性复杂度))。
回答 5
12000个元素在Python中什么都没有…实际上,只要Python解释器在您的系统上具有内存,元素的数量就可以增加。
回答 6
对于不同的系统,它会有所不同(取决于RAM)。最简单的找出方法是
import six
six.MAXSIZE
9223372036854775807
这使的最大尺寸list
和dict
太,按照该文件
回答 7
我想说,您仅受可用RAM总量的限制。显然,数组越大,对其进行的操作就越长。
回答 8
我是在x64位系统上从这里获得的:win32上的Python 3.7.0b5(v3.7.0b5:abb8802389,2018年5月31日,01:54:01)[MSC v.1913 64位(AMD64)]
回答 9
列表号没有限制。导致错误的主要原因是RAM。请升级您的内存大小。