파이썬에서 문자열(str)은 가장 많이 사용되는 데이터 타입 중 하나입니다. 겉보기에는 단순해 보이지만, 내부적으로 몇 가지 독특한 특성을 가지고 있어 이를 제대로 이해하면 더 효율적인 코드를 작성할 수 있습니다. 이 글에서는 파이썬 3.x 버전 기준으로 문자열의 핵심 특징 네 가지를 예제와 함께 살펴보겠습니다.
- 불변성(Immutability)
- 이스케이프 시퀀스 자동 인식
- 슬라이싱(Slicing)을 통한 부분 문자열 추출
- 인덱스를 활용한 직접 접근
1. 문자열은 불변(Immutable)이다
파이썬의 문자열은 불변(immutable) 객체입니다. 즉, 한 번 생성된 문자열은 수정할 수 없으며 읽기 전용으로만 접근이 가능합니다. 문자열의 특정 위치에 새로운 값을 할당하려고 하면 TypeError가 발생합니다.
inp = 'Tutorials point' print(inp) # 특정 인덱스의 값을 변경하려는 시도 inp[0] = 't' # 에러 발생! print(inp)
실행 결과:
TypeError: 'str' object does not support item assignment
문자열을 변경하고 싶다면 기존 문자열을 기반으로 새로운 문자열을 생성하는 방식을 사용해야 합니다. 예를 들어 't' + inp[1:]처럼 슬라이싱과 연결(concatenation)을 조합하면 원하는 결과를 얻을 수 있습니다.
2. 이스케이프 시퀀스 자동 인식
문자열 안에 역슬래시(\)가 포함되면 파이썬이 이를 자동으로 이스케이프 시퀀스로 해석합니다. 대표적으로 줄바꿈을 의미하는 \n, 탭 간격의 \t 등이 있으며, 별도의 처리 없이 곧바로 동작합니다.
inp = 'Tutorials point' print(inp + "\n" + "101")
실행 결과:
Tutorials point 101
만약 역슬래시를 문자 그대로 출력하고 싶다면 문자열 앞에 r을 붙인 로우(raw) 문자열 r'...'을 사용하거나, 백슬래시를 두 번(\\) 입력하면 됩니다.
3. 슬라이싱(Slicing)으로 부분 문자열 추출
C나 C++에서는 substr() 같은 함수로 부분 문자열을 얻지만, 파이썬에서는 슬라이싱 문법으로 더 간결하게 처리할 수 있습니다. 슬라이싱은 두 개의 필수 인자와 하나의 선택적 인자를 받습니다.
- 시작 인덱스: 포함됨
- 끝 인덱스: 포함되지 않음
- 스텝(step): 선택 사항으로, 증감 값을 지정하며 기본값은 1입니다.
inp = 'Tutorials point' print(inp[0:5])
실행 결과:
Tutor
예를 들어 inp[::2]처럼 스텝을 지정하면 문자를 하나 건너뛰며 추출할 수 있고, inp[::-1]을 사용하면 문자열을 손쉽게 뒤집을 수도 있습니다.
4. 인덱스를 통한 직접 접근
파이썬 문자열의 각 문자는 메모리상에 연속된 형태로 저장되므로, 인덱스를 이용해 특정 위치의 문자에 O(1) 시간 복잡도로 바로 접근할 수 있습니다.
inp = 'Tutorials point' print(inp[0] + inp[1])
실행 결과:
Tu
참고로 파이썬은 음수 인덱스도 지원합니다. inp[-1]은 마지막 문자 't', inp[-2]는 뒤에서 두 번째 문자 'n'을 반환하므로, 문자열 끝에서부터 접근할 때 매우 편리합니다.
마무리
이번 글에서는 파이썬 문자열의 대표적인 특징인 불변성, 이스케이프 시퀀스 자동 인식, 슬라이싱, 인덱스 접근 네 가지를 살펴보았습니다. 이러한 특성들을 잘 이해해두면 문자열 처리 로직을 설계할 때 발생할 수 있는 오류를 예방하고, 더 파이써닉(Pythonic)한 코드를 작성하는 데 큰 도움이 될 것입니다.