[python] 성능 향상을 위한 리스트 활용 트릭

HYEOB KIM·2022년 5월 22일
1

algorithm

목록 보기
9/44
post-custom-banner

성능 향상과 메모리를 효율적으로 쓰는 방법

대부분의 프로그래밍 언어가 느려지는 경우는 메모리 재할당이 이뤄지기 때문입니다. 주로 for 문에서 이런 일이 발생합니다. 아래의 경우를 보겠습니다.

import time

start_time = time.time()
a = list(range(100000))
a2 = list()

for i in a:
    a2.append(i*2)

end_time = time.time() 
fin = end_time - start_time
print(fin)
#결과
0.04319477081298828

위 코드는 for 문의 스텝이 진행될 때마다 메모리 재할당이 발생합니다. a2 변수에 append하기 때문입니다. 속도저하가 일어나고 메모리를 효율적으로 사용하지 못합니다. 결과는 제대로 나와도 이런 코드는 효율적이지 못하다.

더 나은 코드는 아래와 같습니다.

import time

start_time = time.time()
temp = [x*2 for x in range(100000)]
end_time = time.time()
fin = end_time - start_time
print(fin)
#결과
0.01129007339477539

속도가 4배나 개선되었습니다.
[x*2 for x in range(100000)] 방식을 이용해서 성능을 개선할 수 있었습니다.

하지만 놀랍게도 성능을 개선할 수 있는 더 나은 방법이 있습니다.

import time

start_time = time.time()
a = list(range(100000))
a2 = map(lambda n: n*2, a)
end_time = time.time()

fin = end_time - start_time
print(fin)
#결과
0.0034818649291992188

속도가 훨씬 빨라졌습니다.

map() 함수를 사용하면 python 내부적으로 연산과 메모리를 관리하기 때문에 효율적으로 모든 요소에 함수를 적용할 수 있습니다. lambda 예약어를 사용해 함수를 만들고 이 함수를 a 변수에 적용했습니다.

참고 자료:

profile
Devops Engineer
post-custom-banner

1개의 댓글

comment-user-thumbnail
2023년 10월 31일

지나가다가 덧붙입니다.
마지막 map을 사용한 연산은 실제 연산을 수행한 게 아니라
이터레이터 객체를 생성했을 뿐이라 빠른 것 아닌가요

답글 달기