본문 바로가기
파이썬/파이썬 문법(심화)

[잡지식] 문자열 연결에 "+"를 사용하지 마세요!

by soypablo 2023. 2. 19.

파이썬에서 여러 문자열을 연결할 때 "+"로 문자를 합치는 경우가 많다.

이렇게 아주 간단하게 두 문자열을 합칠 수 있고,

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

 

Do Not Use “+” to Join Strings in Python

A comparison of the approaches for joining strings in Python, using “+” and join() method.

towardsdatascience.com