seok9211   3년 전

안녕하세요. Python과 pypy 3의 메모리 관련해서 궁금한 점이 있어서 고수님들의 조언을 얻고자 여쭤봅니다..

제가 알기론 pypy3는 GC를 포기하고 메모리 위에 무언가? 를 올려서 반복문 등을 더 빠르게 연산할 수 있도록 한 인터프리터로 알고 있습니다. 그렇기 때문에 동일한 코드를 실행했을 때 백준에서 메모리 사이즈가 python 3 에 비해 훨씬 많이 먹지만, 속도는 빠르다고 알고 있습니다.

하지만 기본적으로 차지하는 메모리가 크고 GC가 없기 때문에 재귀 호출을 베이스로 한 코드에서 메모리 초과를 만나는 경우가 있었고(이 부분은 제가 최적화를 하지 못해서 그럴 가능성이 높긴 합니다.), 이런 경우에 python 3에서 제출하면 통과를 받은 경우가 종종 있습니다.

하지만 백준 이외에 일반적인 시험(입사 시험 등)에서 pypy를 인터프리터로 사용하는 경우는 삼성그룹의 소프트웨어 직군 코딩테스트 정도고 나머지는 python 3 사용하고 상황에 따라 2가지 중 하나를 선택할 수 있는 경우는 경험하지 못했습니다. 일반적인 구현 및 시뮬레이션 문제에서 재귀를 이용한 디자인은 빈번하게 있을 수 있기에 코딩테스트용 언어로써 python을 사용하는 것이 초심자로서 불안합니다.

그래서 GC 라이브러리를 사용해 gc. collect() 를 호출하면 가비지 컬렉팅이 일어난다고 해서 사용해보았지만, 여전히 pypy 에서는 시작부터 메모리 초과가 뜨고, pass를 받았던 python 코드에서도 시간 초과가 발생합니다. 이 부분에 대해서 pypy 3 에서 메모리를 효율적으로 사용할 수 있는 방법, 혹은 GC를 정상적으로 작동시키는 방법(?) 등 관련된 지식을 가지고 계신 분들에게 여쭤보고 싶습니다….

정리 하면

1. pypy3가 메모리가 빡빡한 이유

2. Python3 에서 통과하지만 메모리 초과로 인해 pypy3에서 통과못하는 코드의 메모리 최적화 방법

3. pypy3 에서 gc.collect() 가 정상적으로 동작하는지 유무

에 대해 알고 싶습니다. 위와 비슷한, 유사한 내용에 대해서도 지식을 나눠주시길 부탁드립니다 ㅠㅠ

댓글을 작성하려면 로그인해야 합니다.