파이썬에서 여러 문자열을 연결할 때 "+"로 문자를 합치는 경우가 많다.
이렇게 아주 간단하게 두 문자열을 합칠 수 있고,
s1 = "hello"
s2 = "soypablo"
new_string = s1 + s2
#new_string = "hello soypablo"
여러 문자열의 경우에는 이렇게 연결할 수 있을것이다.
string_list = ["hello", "my", "name", "is", "pablo"]
join_sentence = ""
for s in string_list:
join_sentence += s
print(join_setence)
#"hello my name is pablo"
그러나 이러한 방식은 메모리 비효율 연산을 일으킨다.
왜냐하면 문자열은 불변인 객체이기 때문에 문자열을 수정할 수 없다.
즉 "+" 연산자를 사용하여 문자열을 연결할 때마다 파이썬은 새롭게 임시 객체를 생성하여 새문자열을 만드는 과정을 거치게 되는것이다.
해당 루프과정에서 생기는 일을 표시해보면,
1. join_sentence와 현재 s를 합치기 위한 임시객체를 생성
2. join_sentence에 임시객체를 대입한다.
3. 루프가 끝날 때 까지 1~2를 반복.
따라서 연결할 문자열이 많아지면 임시객체를 반복하여 생성하기 때문에, '+'를 이용한 코드의 메모리비효율 문제가 생기게 된다!
따라서 " + " 연산자를 사용하여 문자열을 결합 하는 대신 .join() 메서드, str.format() 또는 %-formatting을 사용하는 것이 좋다.
join 사용 예시.
string_list = ["hello", "my", "name", "is", "pablo"]
join_sentence = " ".join(string_list)
간단하게 iterable한 객체 안에 든 문자열을 연결할 수 있다.
.join을 사용할 때 일어나는 일.
1. string_list 안에 문자열이 얼마나 있는지 계산.
2. 1에서 계산한 만큼 join_sentence에 메모리 할당.
메모리를 할당 하는 과정이 대폭 줄어들어 빠르게 문자열을 join할 수 있다.
결론
2~3개의 문자열을 합치는 경우라면, 그대로 '+'를 사용해도 크게 문제는 없다.
하지만 합쳐야 할 문자열이 많다면 str.join을 사용하는 것이 효율적인 코드이다.
참고한 글(읽어보시면 좀 더 심층적인 내용에 대해 알 수 있습니다.)
https://towardsdatascience.com/do-not-use-to-join-strings-in-python-f89908307273
'파이썬 > 파이썬 문법(심화)' 카테고리의 다른 글
[WIP]대한민국에서 가장 자세한 f-string 가이드 (0) | 2023.05.26 |
---|---|
(Python) 약수 구하기.(시간 복잡도:$O(\sqrt{n})$) (0) | 2022.12.26 |
2진수로 표현한 숫자의 1의 개수 세기. (0) | 2022.10.27 |
2차원 리스트를 회전시키기 (0) | 2022.10.25 |
0으로 초기화된 2-차원 리스트 생성하기. (0) | 2022.06.28 |