저는 알고리즘을 풀 때 늘 이런 고민을 했습니다.
출력값을 저장하는 곳을 리스트
로 만들어야 할까, 문자열
로 만들어야 할까?
그동안 뭔가 문자열이 빠를 것 같다는 생각에 문자열을 사용했는데, 이번에 제대로 알아보았습니다 😎
리스트를 생성한 후, append로 계속 출력값을 추가하는 방식입니다.
마지막에 리스트를 문자열로 변환하여 출력합니다.
answersList = []
answersList.append(newAnswer)
print("\n".join(answersList))
출력값을 +
나 join()
을 사용해 문자열에 바로 추가하는 방식입니다.
마지막에 출력값이 모여진 문자열을 출력합니다.
answersStr += newAnswer + "\n"
print(answersStr)
파이썬에서 여러 개의 출력값을 저장하고, 마지막으로 한꺼번에 출력할 때 어떤 게 더 효율적일까?
정답부터 말씀드리자면 리스트
가 더 효율적입니다!
파이썬은 문자열
을 immutable(불변)한 객체로 취급하기 때문에, 문자열에 출력값을 덧붙일 때마다 새로운 문자열 객체가 메모리에 생성됩니다.
또, 문자열이 덧붙여질 때마다 계속 더 큰 문자열을 생성해야하기 때문에 메모리 재할당
이 자주 발생할 수 있습니다.
파이썬에서의 리스트
는 mutable(변경 가능)한 객체이기 때문에, 출력값을 추가하는 것에 메모리 재할당이 적게 발생합니다. 또, 빠르게 값을 추가할 수 있습니다.
리스트는 개별 객체로 출력값을 메모리에 저장하다가, 마지막에 문자열로 변환하며 하나의 큰 문자열만 생성합니다.
따라서 리스트를 사용하는 것이 속도와 메모리적 측면에서 더욱 효율적입니다 👍🏻