몸소 겪었던 Python과 PyPy의 차이(메모리,속도)Tech/Python2021. 2. 5. 00:19
Table of Contents
반응형
무엇을 경험했나?
백준 2263 트리 문제를 풀면서 경험했던 것을 공유하려 합니다.
RecursionError
sys.setrecursion(10**5) //pypy3에서는 정답, python3에서는 recursionError
sys.setrecursion(10**6) //pypy3에서는 메모리초과, python3에서는 정답
(21.03.05 추가)
분명 동일한 recursion 깊이인데 왜 pypy3는 정답이고 python3는 recursionError(깊이 초과)가 발생할까요?
pypy doc을 살펴보면 이렇게 설명되어 있습니다.
pypy3에서는 정확한 크기를 할당하는 것이 아니라 대략적으로 크기를 할당하기 때문에 위와 같은 문제가 발생하게 됩니다.
메모리 초과(MLE) : write와 print 차이
sys.stdout.write(str(root)+" ") //pypy3에서 메모리초과
print(root+" ") //pypy3에서 정답
아이러니하죠. sys.stdout.write가 속도는 분명 더 빠릅니다. 하지만 시간초과가 아닌 메모리 초과를 받을 줄은 상상도 못했습니다.
아래 비교표를 보겠습니다. (출처:백준, 사용 메모리는 제가 추가했습니다.)
순위 | 언어 | 출력 방법 | 평균(초) | 사용 메모리 |
1 | pypy3 | for i in range(1,n+1): sys.stdout.write(str(i)+'\n') | 1.3722 | 더 많음 |
2 | pypy3 | for i in range(1,n+1): print(i) | 3.051 | 더 적음 |
시간상으론 분명 빠른 것을 볼 수 있습니다. 하지만 시간뿐만 아니라 메모리 관리도 신경을 써야 하는데요. pypy3는 가비지 컬렉터가 python3와 다른 구조기 때문에 python3보다 더 많은 메모리로 사용된다고 합니다.(출처)
결과적으로 이 출력문 차이로 메모리 초과를 받는지, Accepted를 받는지가 결정되었습니다.
반응형
'Tech > Python' 카테고리의 다른 글
Python3 나누기연산(/)과 시프트연산(>>)의 속도 차이를 알아보자 (0) | 2021.02.15 |
---|
@CODe_ :: 강승현입니다
가파른 성장을 이루고자 노력하는 개발자입니다. 정리하고, 설명하고, 이해시키는 과정으로 보람을 느낍니다. 개발과 관련된 다양한 정보를 몰입감있게 전달합니다.