한 번에 이해하는 파이썬 ‘문자열 자르기(Slicing)’
파이썬은 데이터 분석에 유용한 문자열 자르기(슬라이싱, Slicing) 기능을 제공합니다. 사용자는 슬라이싱을 통해 문자열의 특정 부분을 효율적으로 추출하거나 조작할 수 있으며, 이는 데이터 분석 및 웹 애플리케이션 개발에 필수적인 기술입니다.
이번 글에서는 파이썬 문자열 슬라이싱의 기본 문법과 CPython의 내부 로직을 살펴보겠습니다.

문자열 슬라이싱 사용 방법
파이썬 문자열 슬라이싱은 오브젝트[시작:끝:증감] 형식으로 구성됩니다. 시작 인덱스는 슬라이스 시작 위치를 정의하고, 끝 인덱스는 해당 문자가 포함되지 않으며, 스텝 값은 문자를 건너뛸 간격을 지정합니다.
예시:
- 양수 인덱스: s = “yozm.wishket.com”에서 s[5:12]는 "wishket"을 반환합니다.
- 음수 인덱스: s[-6:-1]는 "et.co"를 반환합니다.
- 양수 스텝: s[2:8:2]는 "z.i"를 반환합니다.
- 음수 스텝: s[6:1:-2]는 "i.z"를 반환하며, s[::-1]로 전체를 역순으로 슬라이스할 수 있습니다.

슬라이싱의 활용 예시는 다음과 같습니다:
- 특정 패턴 추출(예: 파일 경로에서 파일명 추출)
- 문자열 일부 수정(예: "Hello"에서 "J" + "ello"로 변경)
- 문자열 역순 만들기 (s[::-1] 사용)
불변 문자열 객체
불변 객체란 기존 내용을 변경할 수 없으며, 새롭게 할당해야 합니다. 이는 문자열 슬라이싱 시 중요한 개념으로, 슬라이싱은 원본 문자열을 변경하지 않으면서 새로운 문자열을 만듭니다.

슬라이싱 결과 객체의 메모리 관리
슬라이싱 결과는 원본 문자열과 분리된 별도의 객체입니다. CPython은 기본적으로 참조 카운트 기반의 가비지 컬렉션을 사용하며, 부분 문자열에 대한 안전한 복사를 통해 메모리 누수를 방지합니다.
- 빈 문자열과 단일 문자 캐싱을 통해 최적화를 수행합니다.
- 프리리스트를 사용하여 작은 Unicode 객체의 생성을 빠르게 합니다.
예제로 보는 내부 처리 흐름
파이썬 코드 예제의 내부 처리 과정을 살펴보면, 슬라이싱 동작에 따라 메모리 복사가 발생합니다. 예를 들어:
- sub1 = s[0:]: 전체 문자열 반환, 메모리 사용량 저렴.
- sub2 = s[7:16]: 부분 문자열 생성, 내부적으로 메모리 복사 발생.
- sub3 = s[::2]: 짝수 인덱스 문자 수집, 새로운 객체 생성 및 복사 발생.
마치며
문자열 슬라이싱은 파이썬에서 텍스트 데이터를 효율적으로 처리하는 중요한 도구입니다. 기본 문법과 활용법을 잘 알고, CPython의 내부 구현을 이해하면 더욱 효과적인 코드를 작성할 수 있습니다.
해당 기사는 GPT를 이용하여 요약한 내용입니다.