강의로 돌아가기
kh

append 사용시 메모리에 대해서

python에서 list.append를 사용하면 list에 값을 추가한 객체를 메모리에 다시 할당하기 때문에 for문 사용시 속도가 느려진다고 알고있습니다. 제대로 알고 있는게 맞나요?
혹시 대용량의 데이터 처리시 미리 list에 메모리를 크게 할당해서 위와 같은 현상을 방지하는 방법이 있을까요?

1 개의 답변
이시윤

Python 에서의 list.append원칙적으로는 리스트의 길이에 비례하여 느려지는 연산은 아닙니다. (원칙적으로는 이라는 표현을 쓴 이유는, 매우 큰 데이터 객체가 만들어져서 Python 보다 하위 수준에 있는 시스템에서 메모리 관리 및 할당에 관련한 작업이 일어날 수 있기 때문입니다.) 아래의 링크를 참고하시면, Python 에서 각 built-in 데이터형에 대한 여러 가지 연산의 복잡도가 소개되어 있습니다.

https://wiki.python.org/moin/TimeComplexity

대용량의 데이터 처리시 미리 list 메모리를 크게 할당해서 사용하는 방법은 물론 있습니다만, 어떤 방법을 이용하여 프로그래밍하는 것이 좋은지는 해당 프로그램이 이 데이터에 대하여 어떤 연산을 행하려 하는지에 따라 달라지기 때문에, 이 방법이 무조건 최고입니다 라고 말할 수 있는 것은 아닙니다. 단, 이 강의에서 다루고 있는 기초적인 알고리즘 정도의 수준에서는, Python 이 제공하는 데이터형은 위 링크에서 보여진 것과 같은 시간 복잡도를 가진다고 가정하고 프로그래밍함에 아무런 문제가 없을 것입니다.

마지막으로, 질문에서 얘기한 list 의 이용에 있어서 데이터 양의 규모가 매우 커지는 데 따르는 비효율에 대한 고려는, 알고리즘 수준 또는 Python 프로그래밍 수준에서 생각해야 할 것이라기보다는 특정 알고리즘이 실행될 시스템 환경의 측면에서 (실용화하려는 시스템인 경우애는 더욱) 이루어져야 할 것입니다.

답변 쓰기
이 입력폼은 마크다운 문법을 지원합니다. 마크다운 가이드 를 참고하세요.