PythonはC ++より高速で軽量ですか?[閉まっている]


90

Pythonの利点はコードの可読性と開発速度であると常に思っていましたが、時間とメモリの使用量はC ++の場合ほどではありませんでした。

これらの統計は私を本当に強く打った。

PythonとC ++の時間とメモリ使用量について、あなたの経験から何がわかりますか?


18
したがって、Pyhtonはこれらのほとんどの場合、処理速度が遅く、より多くのRAMを使用しますが、ソースは小さくなります。正確には何が問題ですか?
nuriaion 2009

2
私は結果を誤って解釈したと思います。
アレックス

6
本当に興味深いのは、C ++テストがCテストよりも「優れている」ことです。
gbjbaanb 2009

9
@gbjbaanb:驚かないで。C ++には、潜在的に高速なコードを可能にする多くの機能が追加されています。実行していることがわかっている場合、C ++はCよりも途方もなく効率的です(もちろん、C ++にはパフォーマンスを低下させるいくつかの機能が含まれていますが、それらを使用する必要はありません)。しかし、「CはC ++より速い」という一般的な考えは間違っています。(そして、質問はそもそもあまり意味がありません)
jalf

1
リンクは死んでいます
アルン

回答:


237

あなたはそれらの統計を間違って読んでいると思います。彼らは、PythonがC ++ よりも最大で約400倍遅いことを示しており、単一のケースを除いて、Pythonはよりメモリを独占している。しかし、ソースのサイズに関しては、Pythonが完全に勝っています。

私のPythonでの経験は、Pythonが深刻な数値計算を行う場合、C ++よりも10倍から100倍遅いという同じ明確な傾向を示しています。これには多くの理由があります。主な理由は次のとおりです。a)C ++がコンパイルされている間にPythonが解釈されます。b)Pythonにはプリミティブがありません。組み込み型(int、floatなど)を含むすべてがオブジェクトです。c)Pythonリストは異なるタイプのオブジェクトを保持できるため、各エントリはそのタイプに関する追加のデータを格納する必要があります。これらはすべて、ランタイムとメモリの両方の消費を著しく妨げます。

ただし、これはPythonを無視する理由にはなりません。多くのソフトウェアは、100時間の遅延要因があっても、多くの時間やメモリを必要としません。Pythonがシンプルで簡潔なスタイルで勝てるのは開発コストです。開発コストのこの改善は、追加のCPUおよびメモリリソースのコストを上回ることがよくあります。ただし、そうでない場合は、C ++が優先されます。


108
また、Pythonが深刻な数値の計算に時間がかかると言う人は、NumpyモジュールとScipyモジュールを使用していません。Pythonは最近、科学計算に本格的に取り組んでいます。もちろん、速度はCで記述されたモジュールまたはFortranで記述されたライブラリーを使用することから得られますが、私の意見ではスクリプト言語の美しさです。
Justin Peel

3
私はASUREあなたが言ったとこのことを証明するためのリンク:blog.dhananjaynene.com/2008/07/...
ucefkh

2
について:c)Pythonリストは異なるタイプのオブジェクトを保持できるため、各エントリはそのタイプに関する追加データを保存する必要があります。pythonリストは、実際にはオブジェクトへのポインタのリストです。Pythonでは、それはタイプを認識する値ですが、変数は「汎用値オブジェクト」へのポインタにすぎません(したがって、偶数は不変です)。したがって、リストはその内容のタイプを格納するのではなく、単なるポインタを格納します。あなたはメモリのオーバーヘッドについては正しいです-pythonはタイプと他のタイプの値のコンテキストを保存する必要があります。
アレックス

あなたがcpython..then yesについて話すなら、pypyはほとんどの場合非常に高速です(javaと比較して、javaの1/3の速度は推測します)、pythonのサブセットはc ++とほぼ同じくらい高速です(sheskinを参照)
Quonux

1
@JustinPeel私はそれが本当かどうか質問します。numpyand を広範囲に使用する場合でもscipy、大規模なpythonコードベースでは、純粋なpythonに多くのコードが含まれる可能性が高く、物事はよりも遅くなりC++ます。PythonスクリプトC++は、Cコードのパーセンテージがに達すると、スクリプトの速度に近づき100ます。その時点で、Pythonスクリプトではなくなります。確かにpythonは離陸していますが、それが高速であるからではありませんC++-使いやすいからです。
dbliss

132

シュートアウトにおけるPythonの最も遅い(> 100x)使用はすべて、高いGFlop / sカウントを必要とする科学的操作です。とにかくそれらのためにpythonを使用すべきではありません。Pythonを使用する正しい方法は、これらの計算を行うモジュールをインポートして、家族とリラックスした午後を過ごすことです。それはpythonicな方法です:)


3
現在、いくつかのPythonからC ++へのコンパイラーがあるため、PythonはC ++と同じくらい高速な場合があります。
アンダーソングリーン

26

私の経験はベンチマークと同じです。Pythonは遅くなることがあり、より多くのメモリを使用します。私ははるかに少ないコードを記述し、それはデバッグがはるかに少なくて初めて動作します。メモリを管理するので、メモリ管理を行う必要がなく、コアリークを追跡する時間を節約できます。

あなたの質問は何ですか?


ベンチマークの結果に戸惑いました。私はそれらを誤って解釈したことがわかりました。
アレックス

16

ソースのサイズは、実際に測定するのが賢明ではありません。たとえば、次のシェルスクリプト:

cat foobar

PythonまたはC ++の同等のものよりもはるかに短い。


35
また、PythonまたはC ++のバージョンが長いほど、メンテナンスがはるかに簡単になります。ソースコードのサイズが重要であると私は主張します。特定の単純なタスクでは、簡潔なシェルスクリプトが適しています。
S.Lott、2009

また、ソースコードのサイズは非常に重要であり、一部のタスクでは、Bashがその仕事に適したツールであると私は信じています。シンプルなbashスクリプトをpythonと比較する素晴らしい例を参照してください:innolitics.com/articles/programming-languages/…(少し下にスクロールする必要があります)。これは、よりも少し洗練された例だと思いますcat footer
jdg 2018

7

また:C ++対サイコ

とにかく純粋なPythonに焦点を当てる傾向のあるものをベンチマークにする傾向があるので、それはまだ悪い比較です。より現実的なアプリケーションのパフォーマンス、またはC ++とNumPyのパフォーマンスを比較して、プログラムが著しく遅くなるかどうかを判断することをお勧めします。


2
言い換えれば、numbercrunchyのものは非常に遅いため、C ++で記述してPythonから呼び出す:-)
igouy

1
あなたがそれをより速くするためにPythonでライブラリを使用するつもりなら、あなたは同様にc ++で数値処理ライブラリを使用することもできます。そうすれば、コードの束を書かなくてもc ++の柔軟性を保つことができます:)
SuperSim135

それは神の層の無意味なネクロです。OPは文字通り、読みやすさと利便性のためにPythonを好むと述べていますが、ライブラリの作成者に面倒を見てもらうことでパフォーマンスの利点のほとんどを得ることができるのに、なぜ誰かがあまり好きではない言語を直接使用するのでしょうか?ライブラリーを使用することのポイントは、ライブラリーがたまたま自分で行うような作業を行う必要がないことです。ライブラリーがたまたまネイティブバインディングであるということは、最適化/実装の詳細です。
ミリムース

6

ここでの問題は、2つの異なる問題を解決する2つの異なる言語があることです...これは、C ++とアセンブラを比較するようなものです。

Pythonは、迅速なアプリケーション開発用であり、パフォーマンスがほとんど問題にならない場合に使用します。

C ++は迅速なアプリケーション開発用ではなく、低レベルのプログラミングのためにCから速度の遺産を継承します。


3

これは、いつものように管理された使いやすいプログラミング言語の問題と同じです-遅くなります(メモリを食べることもあります)。

これらは、処理ではなく制御を行う言語です。画像を変換するアプリケーションを作成する必要があり、Pythonも使用する必要がある場合、すべての処理をC ++で記述し、バインディングを介してPythonに接続し、インターフェイスとプロセスの制御は完全にPythonにすることができます。


これらのライブラリはすでにPython、C、またはJava用に記述されているので、動的言語を使用してそれらを接着してみませんか?
aoeu256

2

これらの統計は、Pythonがはるかに低速であり、それらのベンチマークに対してより多くのメモリを使用していることを示していると思います。正しい方法で読んでいますか?

私の経験では、これは主にPythonでネットワークおよびファイルシステムにバインドされたプログラムを記述することですが、Pythonは重要な点で大幅に遅くなることはありません。この種の作業では、その利点がコストを上回ります。


確かに。パフォーマンスが問題である場合、何のPythonで良いが一緒になって、高性能外部モジュールを結合、またはシステムを試作した後、ボトルネック(通常深い内側ループでは)Cモジュール等のように書き換えることができるようにされている
XAN
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.