[Python] Python과 PyPy

seongminn·2022년 4월 19일
0

Python

목록 보기
1/1
post-thumbnail

알고리즘 문제를 풀다 보면 Python3 이외에도 PyPy3라는 언어를 지원하는 경우가 있다. 그리고 간혹 Python3로는 시간 초과 오류가 발생하는 문제를 PyPy3를 사용하면 오류 없이 해결할 수 있다.
이번 포스트에서는 이 PyPy3에 대해서 살펴보고자 한다.

💬 파이썬

파이썬은 쉽고 직관적인 문법 덕분에 사용하기 쉬운 언어로 잘 알려져 있다. 덕분에 최근 몇 년동안 꾸준한 상승세를 보여왔고, 대표적인 프로그래밍 언어인 C와 Java의 점유율을 끈질기게 추격해왔다. 언어별 인기도 지수를 나타내는 티오베 지수에 따르면 지난 2021년 10월에는 파이썬이 결국 이 둘을 앞지르고 1위에 등극했다.

티오베는 우수한 생태계, 사용 편의성, 풍부한 라이브러리, 빠른 편집 실행 주기 등을 파이썬의 장점으로 꼽았고, 이어서 “C와 자바의 장기 집권은 끝났다”라고 언급했다.

하지만 파이썬은 속도가 느린 언어라고 평가받기도 한다. 이를 해결하기 위해 다양한 시도를 해왔고, 이 과정에서 등장한 것이 Cython, IronPython, 그리고 PyPy다.

⏱ 파이썬의 속도

그렇다면 파이썬이 느린 이유는 무엇인가?

그 원인은 고급 언어인 파이썬을 기계어로 번역하는 과정에서 발생한다.
파이썬은 대표적인 인터프리터 언어이고, 이와 반대되는 개념으로 C와 Java 등의 컴파일 언어가 존재한다.

컴파일 언어

컴파일러는 전체 코드를 한번에 기계어로 변환한다. 그래서 줄 단위로 번역을 진행하는 인터프리터에 비해 번역하는 시간은 오래 걸리는 편이다. 하지만, 한번 컴파일 할 때 실행 파일을 생성하기 때문에 코드를 재실행할 경우 해당 실행 파일을 실행하기만 하면 된다. 따라서 실행 시간은 인터프리터에 비해 빠른 편이다.

인터프리터 언어

인터프리터는 고급 언어를 위에서부터 한 줄씩 차례로 번역하면서 실행한다. 그렇기에 컴파일러에 비해 번역에 소모되는 시간이 적다. 하지만, 매 실행마다 코드를 번역해야 하기 때문에 일반적으로 인터프리터 언어는 실행 속도가 느린 편이다.

파이썬이 인터프리터 언어라는 것에서 발생하는 이러한 단점 때문에 실제로 파이썬 컴파일러도 존재한다. 그것이 바로 Cython, Jython, IronPython, PyPy 등이고, 이 중에서 PyPy가 다른 구현체에 비해 월등히 빠른 수행 속도를 보여준다.

💬 PyPy

앞서 언급한 것처럼 PyPy는 파이썬의 기본 인터프리터인 CPython을 대체하는 구현체이다.
PyPy는 JIT (Just-In-Time) 컴파일을 사용한다. 이는 컴파일러와 인터프리터의 방식을 적절히 혼합한 것으로, 코드를 번역한 뒤 캐싱(Caching)한다. 이후에 똑같은 코드가 있다면, 이를 컴파일하는 것 대신에 캐싱해둔 값을 사용하여 기계어 코드가 매번 생성되는 것을 방지한다. 그렇기 때문에 매번 코드를 번역하고 실행하는 인터프리터의 느린 속도를 개선할 수 있다.

하지만, 문제점 또한 존재한다.
코드를 저장할 공간이 필요하기 때문에 PyPy는 Python에 비해 메모리를 많이 사용한다는 단점이 있다.

📌 결론

비교적 간단한 코드는 Python3을 활용했을 때 속도와 메모리 측면에서 우세하다.
반대로 복잡하고 반복이 많은 코드는 상황에 맞게 PyPy3를 적절히 활용하는 것이 시간 초과 오류를 해결하는 데에 도움이 될 것이다.

--

참고 사이트

🙇🏻‍♂️ https://lgphone.tistory.com/128
🙇🏻‍♂️ https://ralp0217.tistory.com/entry/Python3-%EC%99%80-PyPy3-%EC%B0%A8%EC%9D%B4

profile
돌멩이도 개발 할 수 있다

0개의 댓글