Python列表有多大?

问题描述 投票:97回答:10

在Python中,列表有多大?我需要一个大约12000个元素的列表。我还能运行排序等列表方法吗?

python list size
10个回答
175
投票

根据source code,列表的最大大小是PY_SSIZE_T_MAX/sizeof(PyObject*)

PY_SSIZE_T_MAXpyport.h中被定义为((size_t) -1)>>1

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

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

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


-14
投票

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


51
投票

作为Python documentation says

了sys.maxsize

平台的Py_ssize_t类型支持的最大正整数,因此最大大小的列表,字符串,dicts和许多其他容器都可以。

在我的电脑(Linux x86_64)中:

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

26
投票

当然可以。实际上你可以轻松地看到自己:

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

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

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

但确实如其他人所说的那样。数组越大,操作越慢。


6
投票

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

此外,尽管列表的大小,列表方法/功能仍应继续工作。

如果你关心性能,那么查看像NumPy这样的库可能是值得的。


5
投票

Python中有12000个元素......实际上,只要Python解释器在您的系统上有内存,元素的数量就可以了。


5
投票

Performance characteristics for lists在Effbot上有描述。

Python列表实际上是作为快速随机访问的向量实现的,因此容器基本上可以容纳与内存中的空间一样多的项目。 (您需要列表中包含的指针空间以及指向的对象的内存空间。)

附加是O(1)(摊销常数复杂度),但是,从序列中间插入/删除将需要O(n)(线性复杂度)重新排序,这将变得比列表中的元素数量慢。

您的排序问题更加细致,因为比较操作可能需要无限的时间。如果你进行的比较非常缓慢,那将需要很长时间,尽管这不是Python's list data type的错。

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


2
投票

它因不同的系统而异(取决于RAM)。最简单的方法是找出答案

import six six.MAXSIZE 9223372036854775807 根据list,这也给出了dictdocumentation的最大尺寸


1
投票

我说你只受限于可用的RAM总量。显然,阵列越大,对它的操作就越长。


0
投票

我在x64位系统上得到了这个:win32上的Python 3.7.0b5(v3.7.0b5:abb8802389,2018年5月31日,01:54:01)[MSC v.1913 64位(AMD64)]

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.