Python이 C ++보다 빠르고 가볍습니까? [닫은]


90

저는 항상 Python의 장점이 코드 가독성과 개발 속도라고 생각했지만 시간과 메모리 사용량은 C ++만큼 좋지 않았습니다.

이 통계 는 저에게 정말 충격적이었습니다.

귀하의 경험은 Python 대 C ++ 시간 및 메모리 사용량에 대해 무엇을 알려 줍니까?


18
따라서 Pyhton은 이러한 경우 대부분 느리고 더 많은 RAM을 사용하지만 소스는 더 작습니다. 정확히 무엇이 문제입니까?
nuriaion

2
결과를 잘못 해석 한 것 같습니다.
Alex

6
정말 흥미로운 점은 C ++ 테스트가 여전히 C 테스트보다 '낫다'는 것입니다!
gbjbaanb

9
@gbjbaanb : 놀랍지 않습니다. C ++는 잠재적으로 더 빠른 코드를 가능하게하는 많은 기능을 추가했습니다. 당신이 무엇을하고 있는지 알고 있다면, C ++는 C보다 훨씬 더 효율적일 수 있습니다. (물론 C ++에는 성능을 저하시키는 몇 가지 기능도 포함되어 있지만 반드시 사용할 필요는 없습니다). 그러나 "C가 C ++보다 빠르다"는 일반적인 믿음은 잘못되었습니다. (그리고 질문은 처음에는 그다지 의미가 없습니다)
jalf

1
링크가 끊어졌습니다
Arn

답변:


237

그 통계를 잘못 읽는 것 같습니다. 그들은 파이썬이 최대 약 400 배 느리다 는 것을 보여줍니다 C ++보다 , 단 하나의 경우를 제외하고 파이썬은 메모리를 많이 . 그러나 소스 크기에 관해서는 Python이 우세합니다.

Python에 대한 제 경험은 심각한 숫자 처리를 할 때 Python이 C ++보다 10 ~ 100 배 정도 느리다는 것과 동일한 확실한 추세를 보여줍니다. 여기에는 여러 가지 이유가 있습니다. 주요 이유는 다음과 같습니다. a) Python은 해석되고 C ++는 컴파일됩니다. b) 파이썬에는 프리미티브가 없으며 내장 유형 (int, float 등)을 포함한 모든 것이 객체입니다. c) 파이썬 목록은 다른 유형의 객체를 보유 할 수 있으므로 각 항목은 해당 유형에 대한 추가 데이터를 저장해야합니다. 이것들은 모두 런타임과 메모리 소비를 심각하게 방해합니다.

이것은 파이썬을 무시할 이유가 아닙니다. 많은 소프트웨어는 100 배 속도 저하 요인에도 많은 시간이나 메모리를 필요로하지 않습니다. 개발 비용은 Python이 간단하고 간결한 스타일로 승리하는 곳입니다. 이러한 개발 비용 개선은 종종 추가 CPU 및 메모리 리소스 비용보다 큽니다. 그러나 그렇지 않으면 C ++이 승리합니다.


108
또한 심각한 숫자 처리에 대해 Python이 느리다고 말하는 사람들은 Numpy 및 Scipy 모듈을 사용하지 않았습니다. 파이썬은 요즘 과학 컴퓨팅에서 실제로 도약하고 있습니다. 물론 속도는 C로 작성된 모듈이나 Fortran으로 작성된 라이브러리를 사용하는 데서 비롯되지만 제 생각에는 스크립팅 언어의 아름다움입니다.
Justin Peel

3
나는 당신이 말했다 슈어이 링크가 그것을 증명 : blog.dhananjaynene.com/2008/07/...을
ucefkh

2
에 대해서는 : C) 각 항목의 유형에 대한 추가 데이터를 저장할 수있다, 그래서 파이썬 목록, 다른 유형의 객체를 저장할 수 있습니다. 파이썬 목록은 실제로 객체에 대한 포인터 목록입니다. 파이썬에서는 유형을 아는 값이고, 변수는 "일반 값 객체"에 대한 포인터 일뿐입니다 (따라서 짝수는 변경 불가능합니다). 따라서 목록은 내용의 유형을 저장하지 않고 포인터 만 저장합니다. 하지만 메모리 오버 헤드에 대해서는 맞습니다. 파이썬은 모든 유형의 값에 대해 유형 및 기타 컨텍스트를 저장해야합니다.
Alex

cpython ..에 대해 말하면 그렇습니다. 그러나 pypy는 대부분의 경우 매우 빠릅니다 (Java와 비교할 수 있음, Java의 1/3 속도), Python의 하위 집합은 거의 C ++만큼 빠릅니다 (shedskin 참조)
Quonux

1
@JustinPeel 나는 그것이 사실인지 질문합니다. numpyand 를 광범위하게 사용하더라도 scipy대규모 python코드베이스는 순수한 파이썬으로 많은 코드를 포함 할 가능성이 높기 때문에 C++. 파이썬 스크립트 는 더 이상 파이썬 스크립트가 아닌 코드 C++의 비율이로 C갈 때 스크립트 의 속도에 접근합니다 100. 파이썬은 확실히 떠오르고 있지만 C++사용하기 쉽기 때문에 빠르기 때문이 아닙니다 .
dbliss

132

총격전에서 가장 느린 (> 100x) Python 사용은 모두 높은 GFlop / s 카운트가 필요한 과학적 작업입니다. 어쨌든 파이썬을 사용해서는 안됩니다. 파이썬을 사용하는 올바른 방법은 이러한 계산을 수행하는 모듈을 가져온 다음 가족과 함께 편안한 오후를 보내는 것입니다.그것이 파이썬적인 방법입니다 :)


3
요즘에는 몇 가지 Python-C ++ 컴파일러 가 있으므로 Python은 경우에 따라 C ++만큼 빠를 수 있습니다.
Anderson Green

26

내 경험은 벤치 마크와 동일합니다. Python은 느릴 수 있으며 더 많은 메모리를 사용합니다. 나는 훨씬 적은 코드를 작성하고 훨씬 적은 디버깅으로 처음으로 작동합니다. 나를 위해 메모리를 관리하기 때문에 메모리 관리를 할 필요가 없으므로 코어 누수를 추적하는 시간을 절약 할 수 있습니다.

질문이 뭐야?


벤치 마크 결과에 혼란 스러웠습니다. 내가 그들을 잘못 해석 한 것으로 밝혀졌습니다.
Alex

16

소스 크기는 실제로 측정하기에 합리적이지 않습니다. 예를 들어, 다음 쉘 스크립트 :

cat foobar

Python 또는 C ++ 등가물보다 훨씬 짧습니다.


35
더 긴 Python 또는 C ++ 버전도 유지 관리하기가 훨씬 쉽습니다. 소스 코드 크기가 중요하며 특정 간단한 작업의 경우 간결한 쉘 스크립트가 좋습니다.
S.Lott

또한 소스 코드 크기가 매우 중요하며 일부 작업의 경우 Bash가 작업에 적합한 도구라고 생각합니다. 여기에서 간단한 bash 스크립트를 python과 비교하는 좋은 예를 참조하십시오 : innolitics.com/articles/programming-languages/… (조금 아래로 스크롤해야합니다). 나는 그것이보다 약간 더 정교한 예라고 생각한다 cat footer.
jdg

7

또한 : Psyco 대 C ++ .

그것은 여전히 ​​나쁜 비교입니다. 왜냐하면 아무도 numbercrunchy 작업을하지 않을 것이기 때문입니다. 벤치 마크는 어쨌든 순수 파이썬에서 집중하는 경향이 있습니다. 더 나은 방법은 실제 응용 프로그램의 성능 또는 C ++와 NumPy를 비교하여 프로그램이 눈에 띄게 느려질 지 여부를 파악하는 것입니다.


2
즉, numbercrunchy 물건은 훨씬 느리기 때문에 C ++로 작성하고 Python에서 호출합니다. :-)
igouy

1
파이썬에서 라이브러리를 사용하여 더 빠르게 만들려면 C ++에서 숫자 크 런칭 라이브러리를 사용하는 것이 좋습니다. 이렇게하면 코드를 작성하지 않고도 C ++의 유연성을 유지할 수 있습니다. :)
SuperSim135

그것은 신 티어 무의미한 네크로입니다. OP는 문자 그대로 가독성과 편의성을 위해 Python을 선호한다고 말하는데, 라이브러리 작성자가 대신 처리하도록하여 대부분의 성능 이점을 얻을 수 있는데 왜 누군가가 덜 좋아하는 언어를 직접 사용하겠습니까? 라이브러리 사용의 요점은 자신이 더 잘하는 작업을 수행 할 필요가 없다는 것입니다. 라이브러리가 네이티브 바인딩이되는 것은 최적화 / 구현 세부 사항입니다.
millimoose

6

여기서 문제는 두 가지 다른 문제를 해결하는 두 가지 언어가 있다는 것입니다. C ++를 어셈블러와 비교하는 것과 같습니다.

Python은 신속한 애플리케이션 개발 및 성능이 최소한의 문제 일 때 사용됩니다.

C ++는 신속한 애플리케이션 개발을위한 것이 아니며 저수준 프로그래밍을 위해 C에서 속도의 레거시를 상속합니다.


3

항상 그렇듯이 관리되고 사용하기 쉬운 프로그래밍 언어와 동일한 문제입니다. 느리고 때로는 메모리를 소모합니다.

이들은 처리가 아닌 제어를 수행하는 언어입니다. 이미지를 변환하기 위해 애플리케이션을 작성해야하고 Python도 사용해야한다면 모든 처리를 C ++로 작성하고 바인딩을 통해 Python에 연결할 수 있으며 인터페이스 및 프로세스 제어는 분명히 Python이 될 것입니다.


이러한 라이브러리는 이미 Python, C 또는 Java 용으로 작성되었으므로 동적 언어를 사용하여 서로 연결하는 것은 어떻습니까?
aoeu256

2

이 통계는 Python이 훨씬 느리고 벤치 마크에 더 많은 메모리를 사용한다는 것을 보여줍니다. 올바른 방법으로 읽는 것이 확실합니까?

내 경험상 대부분 Python으로 네트워크 및 파일 시스템 바인딩 프로그램을 작성하는 데있어 Python은 어떤 식 으로든 크게 느리지 않습니다. 그런 종류의 작업에서는 비용보다 이점이 더 큽니다.


과연. 성능이 문제 일 때 파이썬이 잘하는 것은 고성능 외부 모듈을 결합하거나 시스템을 프로토 타이핑 한 다음 병목 현상 (보통 내부 루프의 깊은 부분)을 C 모듈 등으로 다시 작성하도록 허용하는 것입니다.
xan
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.