140

Python では、リストはどれくらい大きくなりますか? 約12000要素のリストが必要です。並べ替えなどのリスト メソッドを引き続き実行できますか?

4

10 に答える 10

224

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

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

于 2009-05-12T23:48:21.557 に答える
93

Pythonのドキュメントにあるように:

sys.maxsize

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

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

>>> import sys
>>> print sys.maxsize
9223372036854775807
于 2013-04-01T07:45:18.747 に答える
28

もちろんOKです。実際、自分の目で簡単に確認できます。

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

私のマシンでこれらの行を実行すると、次のようになりました。

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

でも確かに他の皆さんの言うとおりです。配列が大きいほど、操作は遅くなります。

于 2009-05-12T22:33:28.807 に答える
7

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

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

パフォーマンスが気になる場合は、NumPyなどのライブラリを調べる価値があるかもしれません。

于 2009-05-12T22:36:12.470 に答える
5

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

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

追加はO(1)(償却された一定の複雑さ)ですが、シーケンスの途中に挿入/削除するにはO(n)(線形複雑さ)の並べ替えが必要になり、リスト内の要素の数が増えるにつれて遅くなります。

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

反転には、リスト内のすべてのポインターを交換するのに必要な時間がかかるだけですO(n)(各ポインターを 1 回タッチするため、必然的に (線形の複雑さ))。

于 2009-05-12T23:53:34.090 に答える
5

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

于 2009-05-12T22:29:11.623 に答える
1

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

于 2009-05-12T22:30:24.630 に答える
-18

リスト数の制限はありません。エラーの主な原因は RAM です。メモリ サイズをアップグレードしてください。

于 2014-03-07T02:44:06.807 に答える