¿Python es más rápido y ligero que C ++? [cerrado]

90

Siempre he pensado que las ventajas de Python son la legibilidad del código y la velocidad de desarrollo, pero el uso de tiempo y memoria no eran tan buenos como los de C ++.

Estas estadísticas me impresionaron mucho.

¿Qué le dice su experiencia sobre el uso de tiempo y memoria de Python vs C ++?

Alex
fuente
18
Entonces, Pyhton es en la mayoría de estos casos más lento y usa más RAM, pero la fuente es más pequeña. ¿Cuál es exactamente el problema?
nuriaion
2
Supongo que malinterpreté los resultados.
Alex
6
¡Lo realmente interesante es que las pruebas de C ++ siguen siendo 'mejores' que las de C!
gbjbaanb
9
@gbjbaanb: No me sorprende. C ++ ha agregado muchas funciones que permiten un código potencialmente más rápido. Si sabe lo que está haciendo, C ++ puede ser ridículamente eficiente, más que C. (Por supuesto, C ++ también incluye algunas características que perjudican el rendimiento, pero no tiene que usarlas). Pero la creencia común de que "C es más rápido que C ++" es incorrecta. (y la pregunta no es muy significativa en primer lugar)
jalf
1
El enlace está muerto
Arn

Respuestas:

237

Creo que estás leyendo esas estadísticas incorrectamente. Muestran que Python es hasta 400 veces más lento que C ++ y, con la excepción de un solo caso, Python es más un acaparador de memoria. Sin embargo, cuando se trata del tamaño de la fuente, Python gana rotundamente.

Mis experiencias con Python muestran la misma tendencia definida de que Python es del orden de entre 10 y 100 veces más lento que C ++ cuando se hace un procesamiento de números serio. Hay muchas razones para esto, siendo las principales: a) Python se interpreta, mientras que C ++ se compila; b) Python no tiene primitivas, todo, incluidos los tipos integrados (int, float, etc.) son objetos; c) una lista de Python puede contener objetos de diferente tipo, por lo que cada entrada tiene que almacenar datos adicionales sobre su tipo. Todos estos obstaculizan gravemente tanto el tiempo de ejecución como el consumo de memoria.

Sin embargo, esta no es una razón para ignorar Python. Una gran cantidad de software no requiere mucho tiempo o memoria incluso con el factor de lentitud de 100 veces. El costo de desarrollo es donde Python gana con el estilo simple y conciso. Esta mejora en el costo de desarrollo a menudo supera el costo de recursos de memoria y CPU adicionales. Sin embargo, cuando no es así, C ++ gana.

Moinudin
fuente
108
Además, las personas que hablan de que Python es lento para procesar números serios no han utilizado los módulos Numpy y Scipy. Python realmente está despegando en la informática científica en estos días. Por supuesto, la velocidad proviene del uso de módulos escritos en C o bibliotecas escritas en Fortran, pero esa es la belleza de un lenguaje de scripting en mi opinión.
Justin Peel
3
Te aseguro lo que dijiste y este es un enlace para probarlo: blog.dhananjaynene.com/2008/07/…
ucefkh
2
En cuanto a: c) una lista de Python puede contener objetos de diferente tipo, por lo que cada entrada tiene que almacenar datos adicionales sobre su tipo. La lista de Python es realmente una lista de punteros a objetos. En Python es el valor el que conoce su tipo, mientras que la variable es solo un puntero al "objeto de valor genérico" (por lo tanto, los números pares son inmutables). Entonces, las listas no almacenan los tipos de contenido, solo punteros. Sin embargo, tiene razón sobre la sobrecarga de memoria: Python tiene que almacenar el tipo y otro contexto para valores de cualquier tipo.
Alex
si habla de cpython ... entonces sí, pero pypy es en la mayoría de los casos muy rápido (comparable con java, supongo que 1/3 de la velocidad de java), los subconjuntos de python son casi tan rápidos como c ++ (ver shedskin)
Quonux
1
@JustinPeel, me pregunto si eso es cierto. incluso cuando se hace un uso extensivo de numpyy scipy, pythones probable que una base de código grande tenga mucho código en Python puro, lo que hace que las cosas sean más lentas que C++. una secuencia de comandos de Python se acerca a la velocidad de una C++secuencia de comandos a medida que Cllega el porcentaje de su código 100, momento en el que ya no es una secuencia de comandos de Python. Python está despegando, seguro, pero no porque sea tan rápido como C++, porque es más fácil de usar.
dbliss
132

Todos los usos más lentos (> 100x) de Python en el tiroteo son operaciones científicas que requieren un alto recuento de GFlop / s. NO debe usar Python para esos de todos modos. La forma correcta de usar Python es importar un módulo que haga esos cálculos y luego pasar una tarde relajante con su familia. Esa es la forma pitónica :)

Tim Lin
fuente
3
Hoy en día existen varios compiladores de Python a C ++ , por lo que Python puede ser tan rápido como C ++ en algunos casos.
Anderson Green
26

Mi experiencia es la misma que la de los puntos de referencia. Python puede ser lento y usa más memoria. Escribo mucho, mucho menos código y funciona la primera vez con mucha menos depuración. Dado que administra la memoria por mí, no tengo que hacer ninguna administración de memoria, lo que me ahorra horas en la búsqueda de fugas de núcleo.

¿Cuál es tu pregunta?

S.Lott
fuente
Estaba confundido por los resultados de los puntos de referencia. Resulta que los malinterpreté.
Alex
16

El tamaño de la fuente no es algo sensato de medir. Por ejemplo, el siguiente script de shell:

cat foobar

es mucho más corto que sus equivalentes Python o C ++.


fuente
35
Y mucho más fácil de mantener que las versiones más largas de Python o C ++ también. Sostengo que el tamaño del código fuente sí importa, y para ciertas tareas simples, los scripts de shell concisos son buenos.
S.Lott
También creo que el tamaño del código fuente es muy importante y, para algunas tareas, Bash es la herramienta adecuada para el trabajo. Vea un buen ejemplo comparando un script bash simple con Python aquí: innolitics.com/articles/programming-languages/… (necesita desplazarse un poco hacia abajo). Creo que es un ejemplo un poco más sofisticado que cat footer.
jdg
7

También: Psyco vs. C ++ .

Sigue siendo una mala comparación, ya que nadie haría las cosas crujientes en las que los puntos de referencia tienden a centrarse en Python puro de todos modos. Una mejor sería comparar el rendimiento de aplicaciones realistas, o C ++ versus NumPy, para tener una idea de si su programa será notablemente más lento.

milimosa
fuente
2
en otras palabras, dado que numbercrunchy es mucho más lento, escríbalo en C ++ y
llámelo
1
Si va a usar una biblioteca en Python para hacerlo más rápido, entonces también podría usar una biblioteca de procesamiento de números en C ++. De esa manera, mantiene la flexibilidad de c ++ sin tener que escribir un montón de código :)
SuperSim135
Eso es un necro inútil de nivel divino . OP dice literalmente que prefiere Python por su legibilidad y conveniencia, ¿por qué alguien usaría directamente un lenguaje que le guste menos, cuando puede obtener la mayoría de los beneficios de rendimiento haciendo que los autores de la biblioteca se encarguen de ellos? El objetivo de usar bibliotecas no es tener que hacer el tipo de trabajo que ellos hacen mejor usted mismo, que una biblioteca sea un enlace nativo es un detalle de optimización / implementación.
millimoose
6

El problema aquí es que tienes dos lenguajes diferentes que resuelven dos problemas diferentes ... es como comparar C ++ con ensamblador.

Python es para el desarrollo rápido de aplicaciones y cuando el rendimiento es una preocupación mínima.

C ++ no es para el desarrollo rápido de aplicaciones y hereda un legado de velocidad de C, para programación de bajo nivel.

jheriko
fuente
3

Es el mismo problema con el lenguaje de programación administrado y fácil de usar que siempre: son lentos (y a veces consumen memoria).

Estos son lenguajes para controlar en lugar de procesar. Si tuviera que escribir una aplicación para transformar imágenes y tuviera que usar Python también, todo el procesamiento podría escribirse en C ++ y conectarse a Python a través de enlaces, mientras que la interfaz y el control de procesos serían definitivamente Python.

Migol
fuente
Esas bibliotecas ya están escritas para Python o C o Java, entonces, ¿por qué no usar un lenguaje dinámico para unirlas?
aoeu256
2

Creo que esas estadísticas muestran que Python es mucho más lento y usa más memoria para esos puntos de referencia. ¿Está seguro de que los está leyendo correctamente?

En mi experiencia, que se relaciona principalmente con la escritura de programas vinculados a la red y al sistema de archivos en Python, Python no es significativamente más lento de ninguna manera importante. Para ese tipo de trabajo, sus beneficios superan sus costos.

RichieHindle
fuente
En efecto. Cuando el rendimiento es un problema, Python es bueno para unir módulos externos de alto rendimiento, o crear prototipos del sistema y luego permitir que los cuellos de botella (generalmente en lo profundo de un bucle interno) se reescriban como un módulo C, etc.
xan