참고
http://stackoverflow.com/questions/725782/in-python-what-is-the-difference-between-append-and
http://markandclick.com/1/post/2012/01/python-list-append-vs.html
Python에서 list에 아이템을 더할 때 append나 += 를 수행해서 list에 항목을 추가 할 수 있다.
그런데 이 둘이 미묘한 차이가 있으므로 사용할 때 주의하여야 한다 (성능 최적화가 필요할 경우).
이 결과는 어찌보면 당연한 것이다.
+= 연산의 경우 두 list를 합쳐서 새로운 list를 만드는 것이니, 당연히 느리다.
그런데 append의 경우 하나의 list에다가 항목을 추가하는 것이니, 당연히 += 연산을 이용하는 것보다 빠르다.
따라서, += 연산을 append 대신에 사용하는 것은 비효율적이라는 것을 알 수 있다.
좀 더 자세한 결과를 위해 Python bytecode를 disassembling 해보면 아래와 같은 결과를 얻을 수 있다.
append의 경우 LOAD_ATTR + CALL_FUNCTION을 사용하는 것이고
+=의 경우 BUILD_LIST를 사용하게 된다.
당연히 LOAD_ATTR + CALL_FUNCTION보다 BUILD_LIST가 느린 것은 당연한 것이므로 append가 더 빠르다.
여기서 LOAD_ATTR을 미리 처리해서 append의 속도를 더 빠르게 만들 수도 있다.
같은 함수를 반복 호출할 경우 이런방식으로 사용한다면 좀 더 효율적인 코드를 짤 수 있을것이다.
결론:
list에 항목을 하나만 추가할 때는 +=보다는 append를 사용하고
list들을 이을(concatenation) 때만 +=나 extend를 사용하자
(list들을 이을 때, +=와 extend의 속도차이는 아래의 글을 참고하자. 참고로 list들을 이을 때는 +=가 extend보다 더 빠르다.)
http://stackoverflow.com/questions/4176980/is-extend-faster-than
'Archive' 카테고리의 다른 글
first/last와 begin/end (0) | 2012.05.11 |
---|---|
가독성의 기본 정리 (The Fundamental Theorem of Readability) (0) | 2012.05.11 |
Eclipse의 Runnable JAR File Export의 Library Handling 옵션 설명 (0) | 2012.04.05 |
ls -l 명령어로 파일 크기 확인할 때 1M 단위로 보기 (0) | 2012.03.29 |
리팩토링을 망설이지 말자 (0) | 2012.03.29 |