Python比C++更快更轻吗?

Ale*_*lex 83 c++ python memory statistics performance

我一直认为Python的优点是代码可读性和开发速度,但时间和内存使用率并不如C++那么好.

这些统计数据让我很难受.

您的经验告诉您有关Python与C++时间和内存使用情况的经验?

mar*_*cog 214

我认为你正在错误地阅读这些统计数据.他们表明,Python 比C++ 大约400倍,除了一个案例,Python更像是一个内存耗尽.说到源代码大小,Python会胜出.

我使用Python的经历显示了相同的趋势,即在进行任何严重的数字运算时,Python的速度比C++慢10到100倍.这有很多原因,主要原因是:a)Python被解释,而C++被编译; b)Python没有原语,包括内置类型(int,float等)在内的所有东西都是对象; c)Python列表可以包含不同类型的对象,因此每个条目都必须存储有关其类型的其他数据.这些都严重阻碍了运行时和内存消耗.

这是没有理由忽略Python.即使使用100倍的慢速因子,许多软件也不需要太多时间或内存.开发成本是Python以简单简洁的方式获胜的地方.这种开发成本的提高通常会超过额外的CPU和内存资源的成本.然而,当它没有时,则C++获胜.

  • 而且,那些谈论Python对于严重数字运算缓慢的人还没有使用Numpy和Scipy模块.如今,Python在科学计算领域真正起步.当然,速度来自于使用C语言编写的模块或用Fortran编写的库,但在我看来,这就是脚本语言的美妙之处. (97认同)
  • 我知道你说了什么,这是一个证明它的链接:http://blog.dhananjaynene.com/2008/07/performance-comparison-c-java-python-ruby-jython-jruby-groovy/ (3认同)
  • 关于:*c)Python列表可以包含不同类型的对象,因此每个条目都必须存储有关其类型的其他数据.*python列表实际上是指向对象的指针列表.在python中,它是知道它的类型的值,而变量只是指向"通用值对象"的指针(因此偶数是不可变的).所以列表不存储它的内容类型 - 只是指针.你对内存开销是正确的 - python必须存储任何类型值的类型和其他上下文. (2认同)
  • @JustinPeel 我怀疑这是否属实。即使广泛使用“numpy”和“scipy”,大型“python”代码库也可能有大量纯Python代码,使得速度比“C++”慢。当“C”代码的百分比达到“100”时,Python 脚本的速度接近“C++”脚本,此时它不再是 Python 脚本。Python 正在起飞,这是肯定的,但并不是因为它像“C++”一样快,而是因为它更容易使用。 (2认同)

Tim*_*Lin 126

在枪战中使用Python的所有最慢(> 100x)用法都是需要高GFlop/s计数的科学操作.不管怎么说,你不应该使用python.使用python的正确方法是导入执行这些计算的模块,然后与家人一起度过一个轻松的下午.是pythonic的方式:)

  • 现在有几个[Python-to-C++编译器](/sf/ask/325517041/),因此在某些情况下Python可以像C++一样快. (3认同)

S.L*_*ott 25

我的经验与基准相同.Python可能很慢并且使用更多内存.我写了很多,更少的代码,它第一次工作,调试少得多.由于它为我管理内存,我不需要做任何内存管理,节省了追查核心泄漏的时间.

你有什么问题?


小智 14

源尺寸并不是一个明智的测量方法.例如,以下shell脚本:

cat foobar
Run Code Online (Sandbox Code Playgroud)

比它的Python或C++等价物短得多.

  • 并且更容易维护更长的Python或C++版本.我认为源代码大小确实很重要,对于某些简单的任务,简洁的shell脚本很好. (32认同)

mil*_*ose 6

另外:Psyco vs. C++.

这仍然是一个糟糕的比较,因为无论如何没有人会做数字笨重的东西基准测试倾向于专注于纯Python.更好的方法是比较实际应用程序(C++与NumPy)的性能,以了解您的程序是否会明显变慢.

  • 换句话说 - 因为 numbercrunchy 的东西太慢了,用 C++ 写它并从 Python 调用它 :-) (2认同)

jhe*_*iko 6

这里的问题是您有两种不同的语言来解决两个不同的问题……就像将 C++ 与汇编程序进行比较。

Python 用于快速应用程序开发以及性能最低的情况。

C++不是用于快速应用程序开发,而是继承了 C 的速度遗产——用于低级编程。