2009-04-29 5 views
64

필자는 항상 Python의 장점은 코드 읽기 쉽고 개발 속도라고 생각했지만 시간과 메모리 사용량은 C++만큼 좋지 않았습니다.파이썬은 C++보다 빠르고 가볍습니다.

These stats 정말 열심히 쳤습니다.

파이썬과 C++의 시간 및 메모리 사용에 대한 경험은 무엇입니까?

+14

그래서 Pythton은 대부분의 경우 느리고 더 많은 RAM을 사용하지만 소스는 더 작습니다. 문제가 정확히 무엇입니까? – nuriaion

+2

나는 결과를 잘못 해석했다고 생각한다. – Alex

+4

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

답변

177

나는이 통계를 잘못 읽고 있다고 생각합니다. 그들은 파이썬이 C++보다 약 400 배 느리다이라는 것을 보여줍니다. 단 하나의 경우를 제외하고 파이썬은 더 많은 메모리를 필요로합니다. 근원 크기에 관해서, 파이썬은 편평하게 이긴다.

내 경험으로 보면 파이썬은 심각한 수치 처리를 할 때 파이썬이 C++보다 10 배에서 100 배 정도 느리다는 동일한 추세를 보여준다. 주요 이유는 다음과 같습니다. a) 파이썬이 해석되고 C++가 컴파일됩니다. b) 파이썬에는 기본 요소가 없습니다. 내장 유형 (int, float 등)을 포함한 모든 것이 객체입니다. c) 파이썬리스트는 다른 타입의 객체를 가질 수 있기 때문에 각 엔트리는 그 타입에 관한 추가 데이터를 저장해야한다. 이것들은 모두 런타임과 메모리 소비를 심각하게 저해합니다.

이것은 파이썬을 무시할 이유가 없습니다. 많은 소프트웨어는 100 시간의 느린 속도 요소로도 많은 시간이나 메모리를 필요로하지 않습니다. 개발 비용은 파이썬이 간단하고 간결한 스타일로 승리하는 곳입니다. 개발 비용에 대한 이러한 개선은 종종 추가 CPU 및 메모리 리소스 비용보다 중요합니다. 그러나 C++이 성공하지 못하면 C++이 이깁니다.

+82

또한 Python이 심각한 번호를 처리하기에는 속도가 느리다고 말하는 사람들은 Numpy 및 Scipy 모듈을 사용하지 않았습니다. 파이썬은 요즘 과학적인 컴퓨팅에서 정말로 벗어나고 있습니다. 물론, 속도는 Fortran에서 작성된 C 또는 라이브러리로 작성된 모듈을 사용함에 기인하지만, 필자가 생각하기에 스크립팅 언어의 장점입니다. –

+2

나는 당신이 말한 것과 이걸 증명할 수있는 링크를 만들었다 : http://blog.dhananjaynene.com/2008/07/performance-comparison-c-java-python-ruby-jython-jruby-groovy/ – ucefkh

+2

관련 항목 : * c) 파이썬리스트는 다른 타입의 객체를 담을 수 있기 때문에 각 엔트리는 그 타입에 대한 추가 데이터를 저장해야합니다. * 파이썬리스트는 실제로 객체에 대한 포인터의리스트입니다. 파이썬에서 변수는 타입을 알고있는 값이고, 변수는 "일반적인 값 객체"에 대한 포인터 일뿐입니다 (그러므로 짝수는 불변입니다). 따라서 목록에는 내용의 유형 (포인터 만 포함)이 저장되지 않습니다. 파이썬은 모든 유형의 값에 대해 유형 및 기타 컨텍스트를 저장해야합니다. – Alex

22

내 경험은 벤치 마크와 동일합니다. 파이썬은 느리고 더 많은 메모리를 사용합니다. 필자는 훨씬 적은 코드를 작성하고 훨씬 적은 디버깅으로 처음으로 작동합니다. 그것이 나를 위해 메모리를 관리하기 때문에, 나는 메모리 누출을 쫓는 시간을 절약하면서 메모리 관리를 할 필요가 없습니다.

무엇이 질문입니까?

+0

방금 ​​벤치 마크 결과에 혼란 스러웠습니다. 내가 그들을 잘못 해석 했어. – Alex

2

이 통계는 파이썬이 훨씬 느리고 벤치 마크에 더 많은 메모리를 사용하고 있다고 생각합니다. 올바른 방법으로 읽는다고 확신합니까?

파이썬에서 네트워크 및 파일 시스템에 연결된 프로그램을 주로 사용하는 내 경험으로 보면 파이썬은 그 어떤면에서도 크게 느리지 않습니다. 이런 종류의 일에있어서, 그것의 이득은 그것의 비용보다 중요합니다.

+0

실제로. 성능이 문제가 될 때, 파이썬은 고성능 외부 모듈을 바인딩하거나 시스템 프로토 타입을 작성한 다음 내부 모듈의 병목 현상을 C 모듈 등으로 다시 작성할 수 있습니다. – xan

11

원본 크기는 실제로 측정 할 가치가 없습니다. 예를 들어 다음 쉘 스크립트는 다음과 같습니다.

cat foobar 

은 Python 또는 C++에 해당하는 것보다 훨씬 짧습니다.

+29

훨씬 쉽습니다. 더 이상 파이썬이나 C++ 버전을 유지하라. 나는 소스 코드 크기가 중요하다고 주장하고, 간단한 작업을 간략하게하기 위해 간결한 쉘 스크립트가 좋다. –

+1

좋은 지적입니다. –

+0

나는 또한 소스 코드 크기가 중요하다고 생각하며, 일부 작업의 경우 Bash가 작업에 적합한 도구입니다. 간단한 bash 스크립트를 파이썬과 비교 한 멋진 예제를 보시려면 http://innolitics.com/articles/programming-languages/#what-makes-programming-languages-different (약간 아래로 스크롤해야합니다)를 참조하십시오. 나는 이것이'cat footer'보다 약간 더 세련된 예라고 생각합니다. – jdg

6

기타 : Psyco vs. C++.

아무리 많은 사람도 숫자 벤치마킹을 수행하지 않으므로 여전히 나쁜 비교입니다. 어쨌든 순수한 파이썬에 집중하는 경향이 있습니다. 더 나은 방법은 실제 응용 프로그램의 성능을 비교하는 것입니다. 즉, NumPy와 C++를 비교하면 프로그램이 눈에 띄게 느려지는지 알 수 있습니다.

+1

다른 말로하면 numbercrunchy 항목은 C++로 작성하고 파이썬에서 호출하는 속도가 훨씬 느리기 때문에 :-) – igouy

97

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

+2

요즘에는 [Python-to-C++ 컴파일러]가 여러 개 있습니다 (https://stackoverflow.com/questions/4650243/). convert-python-program-to-cc-code), 파이썬은 어떤 경우에는 C++만큼 빠르다. –

3

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

Python은 신속한 응용 프로그램 개발과 성능 저하가 가장 적은 분야입니다.

C++는 신속한 응용 프로그램 개발을 위해 이 아니고이고 낮은 수준의 프로그래밍을 위해 C에서 속도의 유산을 이어받습니다.

2

언제나처럼 관리되고 사용하기 쉬운 프로그래밍 언어와 동일한 문제입니다. 속도가 느리고 때로는 메모리를 먹는 것과 마찬가지입니다.

이들은 처리하는 대신 제어하기위한 언어입니다. 이미지를 변환하기 위해 어플리케이션을 작성해야하고 파이썬을 사용해야 만한다면 모든 처리는 C++로 작성되고 바인딩을 통해 파이썬에 연결될 수 있으며 인터페이스와 프로세스 제어는 확실히 파이썬이 될 것입니다.