Python

컬렉션 타입 (리스트)

gudwns5533 2026. 5. 22. 17:36

1. 컬렉션 타입

여러 개의 데이터 항목을 하나의 단위로 관리할 수 있게 해주는 데이터 구조. 여러 개의 데이터를 하나의 변수에 저장하고, 관리할 수 있게 해줌. 파이썬에서는 리스트, 튜플, 딕셔너리, 세트 등이 기본적인 컬렉션 타입.

2. 리스트

리스트(List)는 여러 개의 데이터를 하나의 변수에 순서대로 저장할 수 있는 Python의 대표적인 컬렉션 자료형으로,

대괄호( [ ] )를 사용해 생성. 각 요소는 인덱스를 통해 접근할 수 있으며, 서로 다른 자료형의 값을 함께 저장할 수 있고,

요소의 추가, 수정, 삭제가 가능한 mutable(변경 가능한) 구조를 가진다. 이러한 특징으로 인해 리스트는 데이터를 묶어서 관리하거나 반복 처리할 때 매우 유용하게 사용됨.

PyObject_HEAD

  • PyObject_HEAD 는 C언어로 구현된 파이썬 인터프리터(CPython)의 구조체(struct)에 포함된 매크로.
  • 파이썬 객체라면 반드시 가져야 하는 공통 필드를 정의함.
typedef struct {
    PyObject_HEAD         // 공통 필드: 참조 횟수, 타입 정보 포함!
    Py_ssize_t ob_size;   // 리스트의 길이
    PyObject **ob_item;   // 실제 아이템 배열 포인터
    Py_ssize_t allocated; // 할당된 배열 용량
} PyListObject;

1. 리스트 만들기

li1 = [1, 3, 5, 7, 9]
print(li1)
print(type(li1))

li2 = list([1, 3, 5, 7, 9])
# li2 = list((1, 3, 5, 7, 9))  # 튜플 > 리스트 타입캐스팅
print(li2)
print(type(li2))

li3 = ['김사과', '반하나', '오렌지', '이메론']
print(li3)

li4 = [1, 50.5, '김사과', True]   # 각자 타입이 다른 데이터를 저장
print(li4)
print(type(li4))
print(li4[0])
print(type(li4[0]))
print(li4[1])
print(type(li4[1]))
print(li4[2])
print(type(li4[2]))
print(li4[3])
print(type(li4[3]))

# print(li4[4]) # IndexError: list index out of range

'''
[1, 3, 5, 7, 9]
<class 'list'>
[1, 3, 5, 7, 9]
<class 'list'>
['김사과', '반하나', '오렌지', '이메론']
[1, 50.5, '김사과', True]
<class 'list'>
1
<class 'int'>
50.5
<class 'float'>
김사과
<class 'str'>
True
<class 'bool'>
'''

2. 리스트 인덱싱

리스트는 각 항목의 위치(인덱스)를 가지고 있으며, 인덱스를 사용하여 접근할 수 있다. 인덱스는 0부터 시작.

  • 인덱싱은 리스트에서 '하나의 요소'를 꺼내는 것입니다.
  • 결과는 → 꺼낸 하나의 값(값 자체)입니다.
  • 대괄호로 감싸지지 않습니다.
  • 인덱싱을 할 때 마다 대괄호가 하나씩 벗겨짐. (차원 감소)
li2 = [1, 2, '파이썬', ['김사과', '오렌지']]
print(li2)
print(type(li2))
print(li2[1])
print(type(li2[1]))
print(li2[3])          # 이때 대괄호가 하나 벗겨지며 차원이 감소함.
print(type(li2[3]))
print(li2[3][1])
print(type(li2[3][1]))

'''
[1, 2, '파이썬', ['김사과', '오렌지']]
<class 'list'>
2
<class 'int'>
['김사과', '오렌지']
<class 'list'>
오렌지
<class 'str'>
'''

3. 리스트 슬라이싱

리스트의 일부분만을 추출 할 수 있다.

  • 슬라이싱은 리스트에서 '여러 개 요소'를 잘라서 새로운 리스트로 만드는 것입니다.
  • 결과는 → 잘라낸 "리스트" (대괄호로 감싸진 새로운 리스트)입니다.
리스트[start:end:step]

# start: 어디서 시작할지 (포함)
# end: 어디까지 갈지 (끝 인덱스는 포함하지 않음)
# step: 몇 칸씩 이동할지
li1 = [1, 2, 3, ['김사과', '오렌지', '반하나', ['🍟','🌭','🥩','🍗']]]
print(li1[2:3])
print(li1[3][:2])

'''
[3]
['김사과', '오렌지']
'''

4. 리스트의 항목 추가 / 변경 / 삭제

li4 = [10, 20, 30, 40, 50]
# 슬라이싱을 이용하여 요소를 추가한 경우 리스트에 데이터만 포함
li4[1:2] = ['😁','😂','😎','😍']
print(li4)

# [10, '😁', '😂', '😎', '😍', 30, 40, 50]
li4 = [10, 20, 30, 40, 50]
# 인덱싱을 이용하여 요소를 추가한 경우 리스트 안에 리스트를 만들고 포함
li4[1] = ['😁','😂','😎','😍']
print(li4)

# [10, ['😁', '😂', '😎', '😍'], 30, 40, 50]
li4 = [10, 20, 30, 40, 50]
print(li4[1:3])    # [20, 30]
li4[1:3] = []      # 빈 리스트가 슬라이싱을 통해 저장되면 해당 요소가 삭제됨
print(li4)         # [10, 40, 50]
li4 = [10, 20, 30, 40, 50]
print(li4[1:2])   # [20]
print(li4[1])     # 20
li4[1] = []       # 빈 리스트가 인덱스를 통해 저장되면 빈 리스트 자체가 저장됨
print(li4)        # [10, [], 30, 40, 50]

5. 리스트의 결합

리스트 간의 + 연산으로 리스트를 결합할 수 있고, * 연산으로 리스트를 반복할 수 있다.

li5 = [10, 20, 30]
li6 = [40, 50, 60]
print(li5 + li6)   # [10, 20, 30, 40, 50, 60]
print(li6 + li5)   # [40, 50, 60, 10, 20, 30]

li5 = [10, 20, 30]
li6 = li5 + [40, 50, 60]    # [10, 20, 30] + [40, 50, 60]
print(li6)         # [10, 20, 30, 40, 50, 60]

li6 = [10, 20, 30]
li6 += [40, 50, 60]         # li6 = li6 + [40, 50, 60]
print(li6)         # [10, 20, 30, 40, 50, 60]

li6 = [10, 20, 30]
print(li6 * 3)     # [10, 20, 30, 10, 20, 30, 10, 20, 30]

'Python' 카테고리의 다른 글

컴퓨터가 음수(-)를 표현하는 방법  (1) 2026.05.25
리스트의 함수와 메서드  (0) 2026.05.22
연산자  (0) 2026.05.22
파이썬의 입력과 출력  (0) 2026.05.22
파이썬 변수, 문자열 다루기  (0) 2026.05.21