正如Python文档所述:
sys.maxsize
平台支持的Py_ssize_t类型能表示的最大正整数,也就是列表、字符串、字典和许多其他容器的最大尺寸。
在我的电脑上(Linux x86_64):
>>> import sys
>>> print sys.maxsize
9223372036854775807
sys.maxsize
是问题的答案。不同的架构支持不同的最大值。 - Simon Kuang没问题。实际上,您可以轻松地自己看到:
l = range(12000)
l = sorted(l, reverse=True)
在我的机器上运行这些代码所花费的时间为:
real 0m0.036s
user 0m0.024s
sys 0m0.004s
但正如其他人所说,数组越大,操作速度越慢。
在非正式的代码中,我创建了包含数百万元素的列表。我相信Python的列表实现仅受系统内存量的限制。
此外,列表方法/函数应该继续适用于列表的大小,无论大小如何。
如果您关心性能,可能值得研究诸如NumPy之类的库。
在Python中,12000个元素并不算什么...实际上,元素的数量可以一直增加,直到Python解释器在您的系统上耗尽内存为止。
Python列表实际上被实现为向量,以便进行快速随机访问,因此容器将基本上保存与内存中空间相同数量的项(需要用于列表中包含的指针的空间以及指向的对象在内存中占用的空间)。
添加操作的时间复杂度是O(1)
(平均常数复杂度),但在序列中插入或删除元素需要进行O(n)
(线性复杂度)重排序,并且随着列表中元素数量的增加,重排序所需的时间会越来越长。
关于排序问题更加微妙,由于比较操作可能需要不受限制的时间,如果执行非常缓慢的比较操作,则可能需要很长时间,尽管这不是Python列表数据类型的问题。
反转只需要交换列表中所有指针所需的时间(必须是O(n)
(线性复杂度),因为您每次都要触摸每个指针)。
不同系统的最大内存限制是不同的。最简单的方法是
import six six.MAXSIZE 9223372036854775807
此代码可以给出list
和dict
的最大大小,具体请参见文档
sys
而非 six
是正确的。 - Reza K Ghazi列表数量没有限制。 导致错误的主要原因是RAM。 请升级您的内存大小。
sizeof(PyObject*) == 4
?这代表什么意思? - MattPyObject *
所占用的字节数。这个东西是所谓的指针(你可以通过结尾的星号来认识它们)。指针长为 4 字节,并存储指向分配对象的内存地址。它们长度“仅”为 4 字节,因为现今计算机的 4 字节足以寻址内存中的每个元素。 - Antonio RagagninPY_SSIZE_T_MAX
的值可能会有很大的差异。 - ClydeTheGhost