回答:
ソースコードによると、リストの最大サイズは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要素です。
持つ要素の数がこれ以下である限り、すべてのリスト関数は正しく動作するはずです。
PyObject *
。それはいわゆるポインターです(最後にアスタリスクがあるため、それらを認識します)。ポインタは4バイト長で、割り当てられたオブジェクトへのメモリアドレスを格納します。現在のコンピュータのメモリ内のすべての要素をアドレス指定できるので、4バイトの長さは「唯一」です。
PY_SSIZE_T_MAX
が非常に大きくなることに注意してください。
sys.maxsize
プラットフォームのPy_ssize_t型でサポートされる最大の正の整数、つまり最大サイズのリスト、文字列、辞書、およびその他の多くのコンテナーが持つことができる。
私のコンピューター(Linux x86_64):
>>> import sys
>>> print sys.maxsize
9223372036854775807
sys.maxsize
は質問に対する答えです。異なるアーキテクチャは異なる最大値をサポートします。
確かに大丈夫です。実際、簡単に確認できます。
l = range(12000)
l = sorted(l, reverse=True)
私のマシンでそれらの行を実行すると、
real 0m0.036s
user 0m0.024s
sys 0m0.004s
しかし、他のみんなが言ったように。配列が大きいほど、操作は遅くなります。
リストのパフォーマンス特性は Effbotで説明されています。
Pythonリストは実際には高速ランダムアクセス用のベクターとして実装されているため、コンテナーは基本的にメモリ内のスペースと同じ数のアイテムを保持します。(リストに含まれるポインタ用のスペースと、ポイントされるオブジェクトのためのメモリ内のスペースが必要です。)
追加はO(1)
(一定の複雑さの償却)ですが、シーケンスの途中で挿入/削除を行うと、O(n)
(線形の複雑さ)並べ替えが必要になり、リスト内の要素の数が増えるにつれて遅くなります。
比較操作には無制限の時間がかかる可能性があるため、並べ替えの質問はより微妙です。非常に遅い比較を実行している場合は、時間がかかりますが、Pythonのリストデータ型のせいではありません。
反転は、リスト内のすべてのポインターを交換するのに必要な時間を要します(O(n)
各ポインターを一度タッチするため、必然的に(線形複雑度))。
私はあなたが利用可能なRAMの総量によってのみ制限されていると思います。明らかに、配列が大きいほど、その配列での操作に時間がかかります。
私はこれをx64ビットシステムでここから取得しました:win32上のPython 3.7.0b5(v3.7.0b5:abb8802389、May 31 2018、01:54:01)[MSC v.1913 64ビット(AMD64)]
リスト番号の制限はありません。エラーの主な原因はRAMです。メモリサイズをアップグレードしてください。
sizeof(PyObject*) == 4?
?これは何を表していますか?