web-dev-qa-db-ja.com

Pythonリストはどれくらい大きくできますか?

Pythonでは、リストはどれくらい大きくできますか?約12000個の要素のリストが必要です。ソートなどのリストメソッドを実行できますか?

104
Devoted

ソースコード によると、リストの最大サイズは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要素です。

持っている要素の数がこれ以下である限り、すべてのリスト関数は正しく動作するはずです。

175
Unknown

Pythonドキュメントによると

sys.maxsize

プラットフォームのPy_ssize_t型でサポートされている最大の正の整数。したがって、最大サイズのリスト、文字列、辞書、および他の多くのコンテナが持つことができます。

私のコンピューター(Linux x86_64):

>>> import sys
>>> print sys.maxsize
9223372036854775807
51
Álvaro Justen

もちろん大丈夫です。実際には、自分で簡単に確認できます。

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

私のマシンでこれらの行を実行するのにかかった:

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

しかし、他のみんなが言ったように。配列が大きいほど、操作が遅くなります。

26
Nadia Alramli

カジュアルコードでは、数百万の要素を持つリストを作成しました。 Pythonのリストの実装は、システムのメモリ量によってのみ制限されると考えています。

さらに、リストのメソッド/関数は、リストのサイズに関係なく機能し続ける必要があります。

パフォーマンスに関心がある場合は、 NumPy などのライブラリを調べる価値があります。

6
Doug

12000要素はPythonでは何もありません...実際、Pythonインタープリターがシステムにメモリを持っている限り、要素の数は増やすことができます。

5
AlbertoPL

リストのパフォーマンス特性 はEffbotで説明されています。

Pythonリストは、実際には高速ランダムアクセス用のベクトルとして実装されているため、コンテナは基本的にメモリ内のスペースと同じ数のアイテムを保持します。 (リストに含まれるポインター用のスペースと、ポイントされるオブジェクト用のメモリー内のスペースが必要です。)

追加はO(1)(償却された一定の複雑さ)ですが、シーケンスの中央への挿入/削除はO(n)(線形の複雑さ)の並べ替えを必要とします。リスト。

比較操作には無限の時間がかかるため、ソートの質問はより微妙です。非常に遅い比較を実行している場合、長い時間がかかりますが、 Pythonのリストデータ型 の問題ではありません。

反転には、リスト内のすべてのポインターを交換するのに必要な時間がかかります(各ポインターに1回触れると、必要に応じてO(n)(線形複雑度)。

5
cdleary

システムによって異なります(RAMに依存)。見つける最も簡単な方法は

import six six.MAXSIZE 9223372036854775807ドキュメント に従って、listおよびdictの最大サイズも指定します

2
yunus

使用可能なRAMの合計量によってのみ制限されると思います。明らかに、配列が大きいほど、その上での操作に時間がかかります。

1
Wayne Koorts

私はこれをx64ビットシステムでここから入手しました。Python 3.7.0b5(v3.7.0b5:abb8802389、2018年5月31日、01:54:01)[MSC v.1913 64ビット(AMD64)] win32で

enter image description here

0
user2063329