Pythonでは、配列/リストはどれくらい大きくできますか?私は約12000要素の配列が必要です。並べ替えなどの配列/リストメソッドを実行することはできますか?Python配列の大きさはどれくらいですか?
答えて
source codeによれば、リストの最大サイズはPY_SSIZE_T_MAX/sizeof(PyObject*)
です。
PY_SSIZE_T_MAX
が正規32ビットシステムで((size_t) -1)>>1
ことがpyport.hで定義され、これは(2分の4294967295)/ 4または536870912.
したがって32ビット上のPythonリストの最大サイズでありますシステムは536,870,912要素です。
あなたが持っている要素の数がこれ以下であれば、すべてのリスト関数が正しく動作するはずです。
なぜ 'sizeof(PyObject *)== 4? 'ですか?これは何を表していますか? – Matt
@Mattは、単一のPyObject *のバイト数です。そのことは、いわゆるポインタです(最後にアステリックスがあるため、それらを認識します)。ポインタは4バイト長で、割り当てられたオブジェクトにメモリアドレスを格納します。 4バイトでは、今日のコンピュータのメモリ内のすべての要素に対処することができるため、「4バイトだけ」です。 –
他のマシン、特に64ビットシステムを実行しているマシンでは、 'PY_SSIZE_T_MAX'の値が非常に大きくなることに注意してください(ÁlvaroJustenの回答によると)。 –
12000要素はPythonでは何もありません。実際には、Pythonインタプリタがシステム上にメモリを持つ限り、要素の数は実際には増えます。
利用可能なRAMの総量によってのみ制限されていると言えます。明らかに、配列が大きければ大きいほど、それ以上の操作が必要になります。
一般的にはtrueですが、それらのすべてではありません - appendingは、配列のサイズに関係なく、一定の時間を償却したままです。 – cdleary
面白い、コメントありがとう。 –
もちろんOKです。実際にあなたが簡単に自分で見ることができます。
実行l = range(12000)
l = sorted(l, reverse=True)
を私のマシン上でこれらの行がかかった:
real 0m0.036s
user 0m0.024s
sys 0m0.004s
しかし、誰もが言ったように確かに。アレイが大きいほど操作は遅くなります。
このようなタイミングは誤解を招く可能性があります。ほとんどの場合、Pythonインタープリタを起動するのに費やされます。より良い方法は:python -m timeit.py "l = range(12000); l =ソート済み(l、reverse = True)"私のマシンでは、これはこの例の約1/20の時間を与えます。 –
@dF、正確さについてはあなたが正しいです。それに気づいてくれてありがとう。私はポイントを証明したかっただけです。そしてこの例はそれを証明します。 –
@dF:恐ろしい! 0.024秒は私にとっては長すぎるし、私は今それについて心配することをやめることができてうれしいです。 –
私は数百万の要素を持つリストを作成しました。私は、Pythonのリストの実装はあなたのシステム上のメモリの量によってのみ制限されると考えています。
さらに、リストのメソッド/関数は、リストのサイズにもかかわらず動作し続ける必要があります。
パフォーマンスを気にする人は、NumPyのようなライブラリを調べることをお勧めします。
Performance characteristics for listsは、Effbotに記載されている。
Pythonリストは実際には高速ランダムアクセスのベクタとして実装されているため、コンテナには基本的にメモリ内の領域と同じ数のアイテムが保持されます。 (リストに含まれているポインタのスペースと、オブジェクトが指し示すメモリのスペースが必要です。)
追加はO(1)
(償却された一定の複雑さ)ですが、中に挿入/削除シーケンスにはO(n)
(線形複雑さ)の並べ替えが必要になります。これはリスト内の要素の数よりも遅くなります。
比較操作に無限に時間がかかるため、ソートの質問はより微妙です。あなたが本当に遅い比較を実行している場合、それはPython's list data typeの欠陥ではありませんが、長い時間がかかります。
逆転は、リスト内のすべてのポインタを交換するために必要な時間を要します(各ポインタを1回タッチするため、必然的にO(n)
(線形複雑さ))。 Python documentation saysとして
:
sys.maxsize
プラットフォームのPy_ssize_t型タイプでサポートされる最大の正の整数ので、最大サイズのリスト、文字列、dicts、とすることができる多くの他のコンテナ持ってる。私のコンピュータ(のLinux x86_64版)では
:
>>> import sys
>>> print sys.maxsize
9223372036854775807
リスト番号の制限はありません。 エラーを引き起こす主な理由はRAMです。 メモリサイズをアップグレードしてください。
-1です。(他の回答に示されているように)実際には最大サイズ。 –
- 1. 配列の大きさはどれくらいですか?
- 2. iptablesのバイトカウンタの大きさはどれくらいですか?
- 3. Dのubyte []の大きさはどれくらいですか?
- 4. Flex SWFの大きさはどれくらいですか?
- 5. ソナーデータベースの大きさはどれくらいですか?
- 6. JMSメッセージオブジェクトの大きさはどれくらいですか?
- 7. Python:スライスと配列のマージはどのくらい速いのですか?
- 8. Internet Explorerのツールバーアイコンの大きさはどれくらいですか?
- 9. armv6とarmv7のアーキテクチャの大きさはどれくらいですか?
- 10. Pythonの属性名の最大長はどれくらいですか?
- 11. どのくらいの大きさが大きすぎますか?
- 12. 小さい配列の値が大きい配列にあるかどうかを確認するにはどうすればよいですか?
- 13. csvファイルの列の最大長はどれくらいですか?
- 14. C++で配列に許されるディメンションの最大数はいくらですか?
- 15. 私のパスワードの塩はどのくらいの大きさですか?
- 16. 大きな配列ではなくタッチイベントから描画をコミットします
- 17. どのくらいの大きさのクッキーを作成できますか?
- 18. GHCはなぜそれほど大きく/大きいのですか?
- 19. Kerasでモデルをフィッティングするときのバッチサイズとエポック数の大きさはどれくらいですか?
- 20. 配列にどれくらいのデータがありますか?
- 21. 大きな配列インデックスが正しく格納されないのはなぜですか?
- 22. iPadアプリ名の最大長はどれくらいですか?
- 23. Javaコールスタックの最大深度はどれくらいですか?
- 24. ENUM値の最大長はどれくらいですか?
- 25. mongodbクエリの最大長はどれくらいですか?
- 26. SockJSメッセージの最大サイズはどれくらいですか?
- 27. webRTCデータチャネルメッセージの最大サイズはどれくらいですか?
- 28. NSStringオブジェクトの最大長はどれくらいですか?
- 29. plistの最大容量はどれくらいですか?
- 30. ハッシングイメージバイナリ - 使用するバイト配列の量はどれくらいですか?
Pythonの配列とリストには大きな違いがあります。 – recursive