대부분의 프로그래밍 언어가 느려지는 경우는 메모리 재할당
이 이뤄지기 때문입니다. 주로 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 변수에 적용했습니다.
참고 자료:
지나가다가 덧붙입니다.
마지막 map을 사용한 연산은 실제 연산을 수행한 게 아니라
이터레이터 객체를 생성했을 뿐이라 빠른 것 아닌가요