리스트와 시퀀스는 어떤 관계일까?
리스트(list)는 시퀀스(sequence)의 한 종류일 뿐, 모든 시퀀스가 리스트인 것은 아닙니다. 파이썬에서 시퀀스란 인덱싱과 길이 확인 같은 '시퀀스 프로토콜(인터페이스)'을 지원하는 모든 데이터 타입을 가리키는 포괄적인 개념입니다. 즉, 시퀀스 타입은 리스트보다 더 넓은 상위 집합(superset)이라고 이해하면 됩니다.
대표적인 시퀀스 타입으로는 리스트 외에도 문자열(str), 튜플(tuple), range 객체, 바이트(bytes) 등이 있습니다. 이들은 모두 len() 함수로 길이를 구하고, 대괄호([])를 사용해 특정 위치의 요소에 접근할 수 있다는 공통점을 지니고 있습니다.
슬라이스(Slice)란 무엇인가?
슬라이스는 시퀀스의 일부분을 잘라내는 기능입니다. 코드에서 foo[2:5]처럼 작성하면 파이썬 내부적으로는 자동으로 slice 객체가 생성되어 해당 컨테이너의 특수 메서드(__getitem__ 등)에 전달됩니다. 이렇게 간결한 표기법으로 복잡한 동작을 숨겨주는 것을 '문법적 설탕(syntactic sugar)'이라고 부릅니다.
numbers = [10, 20, 30, 40, 50]
print(numbers[1:4]) # 결과: [20, 30, 40]
일반적인 상황에서는 슬라이스 객체를 직접 다룰 일이 거의 없습니다. 다만 자신만의 시퀀스나 컨테이너 클래스를 설계할 때 __getitem__ 메서드를 오버라이드하면서 슬라이스 객체를 명시적으로 처리해야 하는 경우가 생길 수 있습니다.
핵심 정리
- 시퀀스: 시퀀스 프로토콜을 따르는 모든 타입의 총칭 (리스트, 튜플, 문자열, range 등)
- 리스트: 시퀀스 중 하나로, 변경 가능(mutable)한 대표적인 시퀀스 타입
- 슬라이스: 시퀀스의 부분 범위를 추출하는 기능이자, 내부적으로 생성되는
slice객체