이번 포스트에서는
1. 파이썬의 Reference Type(참조 타입)인 리스트, 듀플, 딕셔너리, 집합의 특징과 주요 메서드를 다뤄보고
2. 파이썬 자료형의 핵심 개념인 Iterable, Sequence, Mutable/Immutable을 설명하고
3. Primitive 타입과 Reference 타입의 차이를 비교해 보겠습니다.
자료형 개념
- Iterable(반복 가능 객체)
: for문처럼 하나씩 꺼내서 쓸 수 있는 반복 작업에 사용될 수 있는 객체.
- Sequence(순서가 있는 자료형)
: 요소들이 정해진 순서를 가지며 인덱스로 접근할 수 있는 자료형. (예: 리스트, 튜플, 문자열)
- Mutable(가변형)
: 객체 생성 후 내부의 값을 변경할 수 있는 자료형. (예: 리스트, 딕셔너리, 집합)
- Immutable(불변형)
: 객체 생성 후 내부의 값을 변경할 수 없는 자료형. (예: 정수, 실수, 문자열, 튜플)
리스트 List
파이썬에서 가장 자주 사용되는 자료형으로, 순서가 있으며 변경 가능(Mutable) 합니다.
대괄호 [] 로 표현 합니다.
인덱스 Index
리스트 안에서 요소의 위치를 나타내는 번호.
- 0부터 시작합니다.
- 음수 인덱스도 가능하며, 뒤에서부터 세는 번호입니다. (-1은 마지막 요소, -2는 뒤에서 두 번째)
슬라이싱 Slicing
인덱스 범위를 지정하여 리스트의 일부를 잘라내는 기능.
- 리스트[start : stop : step] 형태로 사용
(start: 포함하는 시작 인덱스(생략시 처음부터), stop: 포함하지 않는 끝 인덱스(생략시 끝까지), step: 건너뛰는 간격(생략시 1))
리스트의 주요 메서드
- append(x) : 리스트 맨 뒤에 x 추가
- remove(x) : 리스트에서 처음 나오는 x와 일치하는 값을 삭제
- sort() : 리스트 요소를 오름차순으로 정렬 (reverse=True 옵션으로 내림차순 정렬도 가능)
- reverse() : 리스트의 순서를 뒤집음
- insert(i, x) : i번째 위치에 x를 삽입
- pop(i) : i 번째 위치 요소를 꺼내고 리스트에서 제거. 인덱스 i를 생략시 맨 마지막 요소를 꺼냄
- clear() : 리스트의 모든 요소를 삭제
- extend(iterable) : 다른 iterable(리스트, 튜플 등)의 모든 요소를 현재 리스트의 뒤에 추가
튜플 Tuple
순서가 있고 변경 불가능(immutable)한 자료형
소괄호 ()를 사용하여 표현
한 번 생성되면 내부 요소를 바꿀 수 없습니다.
리스트보다 메모리 효율이 좋고, 변경되지 않아야 하는 데이터를 안전하게 보관할 때 사용 됩니다.
(예를 들어 웹사이트의 설정 값이나 좌표값(x, y) 같은 것)
튜플의 주요 메서드
리스트와 달리 변경이 불가능 하기 때문에 리스트처럼 append 나 remove 같은 메서드는 없습니다.
주로 정보를 조회하는 메서드만 제공 됩니다.
- count(x) : 튜플 안에 x가 몇 번 등장하는지 개수를 반환합니다.
- index(x) : 튜플 안에 x가 처음으로 나타나는 인덱스를 반환합니다.
딕셔너리 Dictionary
key : value 쌍으로 데이터를 저장하는 자료형
순서가 없고, 가변형으로 중괄호 {} 를 사용하여 표현
key는 고유해야 하며, 불변형(문자열, 숫자, 튜플) 이어야 합니다.
value 에는 어떤 자료형이든 올 수 있습니다.
딕셔너리의 주요 메서드
- get (key, default_value) : key에 해당하는 value를 반환.
(만약 key가 없으면 에러 대신 None을 반환하거나, default_value로 지정된 값을 반환)
- keys() : 딕셔너리의 모든 키(key)들을 반환
- values() : 딕셔너리의 모든 값(value)들을 반환
- items() : 딕셔너리의 모든 (key, value) 쌍을 튜플 형태로 반환
- pop(key) : key에 해당하는 value를 꺼내면서 해당 key : value 쌍을 딕셔너리에서 삭제
- update({...}) : 전달된 딕셔너리의 키-값 쌍들을 현재 딕셔너리에 추가하거나 기존 값을 변경
- clear() : 딕셔너리의 모든 요소를 삭제
집합 Set
중복을 허용하지 않고, 순서가 없는 자료형
수학적 집합 연산(합집합, 교집합, 차집합)이 가능하며 중괄호 {} 를 사용하여 표현
요소의 순서가 없으므로 인덱스로 접근할 수 없습니다.
중복된 값은 자동으로 제거됩니다.
집합의 주요 메서드
- add(x) : 집합에 x 원소 추가. 이미 있는 원소는 중복으로 추가되지 않음
- remove(x) : 집합에서 x 원소를 삭제. 만약 x가 집합에 없으면 KeyError가 발생
- union(b) / | : 두 집합의 합집합
- intersection(b) / & : 두 집합의 교집합
- difference / - : 두 집합의 차집합
- discard(x) : 집합에서 x 원소 삭제. remove와 달리 x가 집합에 없어도 에러를 발생시키지 않음
(더 안전하게 삭제하고 싶을 때 유용!)
- clear() : 집합의 모든 원소를 삭제
자료형 변환 Casting
서로 다른 자료형 간에 값을 변환하는 기능으로,
데이터를 원하는 형태로 가공해서 효율적으로 사용하기 위한 중요한 도구 입니다.
- list() : iterable을 리스트로 변환
- tuple() : iterable을 튜플로 변환
- set() : iterable을 집합으로 변환. 중복된 요소를 제거됨
- dict() : 키-값 쌍을 담은 iterable을 딕셔너리로 변환
이런 자료형 변환은 언제 필요할까요?
1. 데이터 중복 제거
리스트를 set로 변환하여 중복을 쉽게 제거할 수 있습니다. 혹은 엄청 긴 리스트가 있다고 가정할 경우, 그 안에 중복된 요소들이 많아 딱 한개씩만 남기고 싶다면 set()로 변환했다가 다시 list()로 바꾸면 됩니다.
2. 순서 유지/변경
어떤 데이터가 튜플로 되어 있어 수정이 불가할 때, 갑자기 수정해야할 필요가 생기면 list()로 변한하여 수정하고 다시 tuple()로 돌려놓을 수 있습니다.
3. 키-값 구조가 필요할 때
리스트에서 특정 값이 있는지 찾는 것보다 딕셔너리의 key나 집합의 원소를 찾는 것이 훨씬 빠를때가 있습니다.
is 연산자
두 변수가 같은 객체(동일한 메모리 주소)를 가리키는지 확인합니다.
값이 같더라도(==) 서로 다른 객체일 수 있으므로 is와 ==는 다릅니다.
== 연산자는 두 변수가 같은 값을 가지고 있는지를 물어보는 것이고, 만약 내용물이 같으면 True를 반환합니다.
is 연산자는 두 변수가 메모리 상에서 완전히 같은 객체를 가지고 있는지를 물어보는 겁니다.
예를 들어, 두 사람이 각각 '우리 집 주소는 031번지야" 라고 말한다고 가정할 경우
== 연산자로는
두 사람은 둘 다 031 번지에 사는 것을 확인할 수 있고
is 연산자로는
두 사람이 정말 같은 집에 살고 있는지를 확인하는 것이기 때문에 031번지의 다른 집에 살고 있는 걸 확인할 수 있습니다.
* 파이썬에서는 리스트나 딕셔너리 같은 참조 타입은 is 와 ==의 결과가 다를 수 있는 점을 알아야 합니다.
Primitive 타입(정수, 문자열 등)은 보통 값이 같으면 같은 객체로 처리되는 경우가 많아서 is와 == 결과가 같을 때가 많지만
Reference 타입은 거의 다르다는 걸 기억해야 합니다!
in 연산자
어떤 값이 자료형 안에 포함되어 있는지 확인합니다.
리스트/튜플/문자열: 요소 존재 여부 확인 (있으면 True, 없으면 False)
딕셔너리: key의 존재 여부를 확인. value의 존재 여부를 확인하려면 .values()메서드를 사용.
* in 연산자는 특정 요소의 포함 여부를 빠르고 쉽게 확인할 수 있기 때문에
이후에 포스팅 할 조건문이나 반복문에서 유용하게 사용됩니다!
파이썬 자료형을 메모리 관리 방식에 따라 크게 두 가지로 나눌 수 있습니다.
Primitive (원시 타입) vs Reference (참조 타입)
Primitive (원시 타입)
- int(정수), float(실수), bool(불리언), str(문자열), tuple(튜플) 등이 해당 됩니다.
- 불변형(Immutable) 입니다.
- 값을 변경하려고 하면 새로운 객체가 생성됩니다. 기존 객체는 변경되지 않고, 변수가 새 객체를 가리킵니다.
* 파이썬은 작은 정수(-5 ~ 256)나 짧은 문자열 같은 특정 Primitive 값들을 미리 생성해두고 재활용하는
최적화가 있어, id 값이 같게 나올 수 있습니다. 하지만 개념적으로는 변경 시 새로운 객체가 생성되는 것이 맞습니다.
예를 들어 볼펜으로 "안녕하세요." 라고 썼다가 "안녕히가세요." 라고 바꾸려면,
볼펜으로 썼기 때문에 기존 글씨를 지울 수 없으니 아예 새로운 종이에 "안녕히가세요." 라고 다시 쓰는 것과 같습니다.
Reference (참조 타입)
- list(리스트), dict(딕셔너리), set(집합) 등이 해당됩니다.
- 가변형(Mutable) 입니다.
- 변수가 객체 자체를 직접 저장하는 것이 아닌, 객체가 저장된 메모리 주소를 참조합니다.
- 여러 변수가 같은 객체를 참조할 수 있으며, 이 경우 한 변수를 통해 객체를 변경하면 해당 객체를 참조하는 다른
모든 변수에게도 변경 사항이 반영 됩니다.
* Reference 타입은 여러 변수가 같은 객체를 공유할 수 있습니다. 한 변수로 내용을 바꾸면 다른 변수로 그 객체를
볼 때도 바뀐 내용을 보게 된다는 점을 주의해야 합니다.
예를 들어 연필로 "안녕하세요." 라고 썼다가 "안녕히가세요." 라고 바꾸고 싶으면 기존 글씨를 지우개로 지우고
그 위에 "안녕히가세요." 라고 쓸 수 있는 것과 같습니다.
이 둘의 핵심은
Primitive는 변경 시 새 객체로, Reference는 공유 참조 수정이라는 것을 주의해야 합니다.
'[오즈코딩스쿨] AI 헬스케어 > 🌟 Python' 카테고리의 다른 글
| [Anaconda] 명령어 요약/정리 (0) | 2025.12.11 |
|---|---|
| [Python] 객체 지향 프로그래밍 (1) (0) | 2025.10.13 |
| [Python] 데이터 타입 - 1 (0) | 2025.10.10 |
| [Python] 변수와 함수, 파이썬 입출력 (0) | 2025.10.09 |
| [Python] 아나콘다 설치 및 가상환경 관리 (0) | 2025.10.08 |