【问题标题】:Is Python faster and lighter than C++? [closed]Python 比 C++ 更快更轻吗? [关闭]
【发布时间】:2010-10-22 13:07:39
【问题描述】:

我一直认为 Python 的优势在于代码可读性和开发速度,但时间和内存使用不如 C++。

These stats 给我留下了深刻的印象。

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

【问题讨论】:

  • 所以 Pyhton 在大多数这些情况下速度较慢,并且使用更多 RAM,但源更小。究竟是什么问题?
  • 我想我误解了结果。
  • 真正有趣的是,C++ 测试仍然比 C 测试“更好”!
  • @gbjbaanb:我并不感到惊讶。 C++ 添加了许多功能,可以实现更快的代码。如果您知道自己在做什么,那么 C++ 的效率会高得离谱,比 C 还要高。(当然,C++ 还包括一些会损害性能的特性,但您不必使用它们)。但是“C 比 C++ 更快”的普遍看法是错误的。 (而且这个问题首先不是很有意义)
  • 链接失效

标签: c++ python performance memory statistics


【解决方案1】:

我认为您错误地阅读了这些统计数据。他们表明,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 编写的库,但在我看来,这就是脚本语言的美妙之处。
  • 我相信你所说的,这是一个证明它的链接:blog.dhananjaynene.com/2008/07/…
  • 关于:c) Python 列表可以保存不同类型的对象,因此每个条目都必须存储有关其类型的附加数据。 Python 列表实际上是一个指针列表到对象。在 python 中,值知道它的类型,而变量只是指向“通用值对象”的指针(因此偶数是不可变的)。所以列表不存储其内容的类型 - 只是指针。不过,您对内存开销的看法是正确的——python 确实必须为任何类型的值存储类型和其他上下文。
  • 如果您谈论 cpython..那么是的,但是 pypy 在大多数情况下非常快(与 java 相当,我猜是 java 的 1/3 速度),python 的子集几乎和c++(见shedskin)
  • @JustinPeel 我质疑这是否属实。即使大量使用numpyscipy,大型python 代码库也可能在纯python 中包含大量代码,这使得事情比C++ 慢。 python 脚本的速度接近C++ 脚本的速度,因为其C 代码的百分比变为100,此时它不再是python 脚本。 python 肯定会起飞,但不是因为它和C++ 一样快——因为它更易于使用。
【解决方案2】:

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

【讨论】:

【解决方案3】:

我的经验与基准测试相同。 Python 可能很慢并且使用更多内存。我编写的代码少得多,而且它第一次工作时调试少得多。由于它为我管理内存,因此我无需进行任何内存管理,从而节省了追踪核心泄漏的时间。

你有什么问题?

【讨论】:

  • 我只是对基准测试的结果感到困惑。原来我误解了他们。
【解决方案4】:

源大小并不是一个真正明智的衡量标准。例如下面的 shell 脚本:

cat foobar

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

【讨论】:

  • 更容易维护更长的 Python 或 C++ 版本,也是。我认为源代码大小确实很重要,对于某些简单的任务,简洁的 shell 脚本很好。
  • 我也相信源代码大小很重要,对于某些任务,Bash 是适合这项工作的工具。在此处查看一个将简单 bash 脚本与 python 进行比较的好示例:innolitics.com/articles/programming-languages/…(您需要向下滚动一点)。我认为这是一个比cat footer 稍微复杂一点的例子。
  • 这个线程是关于代码速度/大小,而不是可维护性。
【解决方案5】:

还有:Psyco vs. C++

这仍然是一个糟糕的比较,因为无论如何,没有人会在纯 Python 中进行基准测试倾向于关注的数字易碎的东西。更好的方法是比较实际应用程序或 C++ 与 NumPy 的性能,以了解您的程序是否会明显变慢。

【讨论】:

  • 换句话说 - 因为 numbercrunchy 的东西要慢得多,用 C++ 编写它并从 Python 调用它:-)
  • 如果您打算在 python 中使用库来使其更快,那么您不妨使用 c++ 中的数字处理库。这样你就可以保持 c++ 的灵活性,而不必编写一堆代码:)
  • 那是一个神级毫无意义的死灵。 OP 字面意思是为了可读性和便利性而更喜欢 Python,为什么有人会直接使用他们不太喜欢的语言,当他们可以通过让库作者为他处理这些来获得大部分性能优势时?使用库的意义在于不必做他们自己做得更好的工作,库恰好是本机绑定是优化/实现细节。
【解决方案6】:

这里的问题是你有两种不同的语言来解决两个不同的问题......就像比较 C++ 和汇编程序一样。

Python 用于快速应用程序开发以及性能是最小问题的情况。

C++用于快速应用程序开发,它继承了 C 的速度传统 - 用于低级编程。

【讨论】:

    【解决方案7】:

    托管且易于使用的编程语言与往常一样存在同样的问题 - 它们很慢(有时会占用内存)。

    这些是用于控制而不是处理的语言。如果我必须编写应用程序来转换图像并且也必须使用 Python,那么所有处理都可以用 C++ 编写并通过绑定连接到 Python,而接口和流程控制将绝对是 Python。

    【讨论】:

    • 这些库已经为 Python、C 或 Java 编写,那么为什么不使用动态语言将它们粘合在一起呢?
    【解决方案8】:

    我认为这些统计数据表明 Python 速度要慢得多,并且在这些基准测试中使用更多内存 - 你确定你阅读它们的方式是正确的吗?

    根据我的经验,主要是用 Python 编写网络和文件系统绑定的程序,Python 在任何重要的方面都不会明显变慢。对于这样的工作,它的收益大于成本。

    【讨论】:

    • 确实如此。当性能成为问题时,python 擅长的是将高性能外部模块绑定在一起,或者对系统进行原型设计,然后允许将瓶颈(通常在内循环深处)重写为 C 模块等。
    猜你喜欢
    • 2012-11-30
    • 2019-04-30
    • 2017-08-05
    • 2010-10-11
    • 2016-09-03
    • 1970-01-01
    • 2012-04-28
    • 2011-10-20
    • 2021-07-10
    相关资源
    最近更新 更多