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 |