참고

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