본문 바로가기

프로그래밍/python

파이썬에서 효율적인 문자열 붙이기

Efficient String Concatenation in Python
파이썬에서 효율적인 문자열 결합 방법 (윗 글의 번역본)

랜덤 문자열을 포함하는 정해진 크기의 파일을 하나 생성하는 간단한 파이썬 프로그램을 하나 짜는데, 생각보다 성능이 나지 않는다는 이유로 이래저래 웹 서핑을 하다가 찾아낸 문서입니다.

일반적인 concatenate(+)를 하게될 경우 파이썬은 문조건 새로운 문자열을 생성하게 됩니다. 즉, 메모리 잡아먹는 귀신이라는 얘기지요, 하지만 list 를 사용하여 append하고, 주기적으로 flush하는 기법으로 접근하게 되면, 종속성도 없을 뿐더러 메모리 및 성능 문제도 부가적으로 해결할 수가 있었습니다.

가장 중요하게 여기는 부분은, '성능>속도>메모리'순으로 실험해 보았습니다.

def random_char(n): random 문자열을 n개 반환하는 함수

unit = 1000
filesize = 8 * 1024 * 1024 # 64mb
str_list = []
for i in xrange(filesize/unit):
    str_list.append(random_char(unit))
    if i % (unit/10) == 0:
        file.write(''.join(str_list))
        str_list = []
    file.write(''.join(str_list))

이렇게 하는데 걸리는 시간은 대략 1분 27초 정도 소요, 레지던트 메모리는 32k 정도만 소요됩니다.

python 프로그래밍을 하면서 항상 느끼는 것이지만, python도 잘만 사용하면 왠만한 프로그램 언어만큼이나 좋은 성능을 낼 수 있으며, 또한 직관적이고 쉽게 사용할 수 있다는 것을 새삼 느끼게 됩니다.