Post

Python 자료형

Python 자료형

Python 자료형


파이썬의 자료형은 크게 기본형(Immutable Type)참조형(Mutable Type) 으로 나뉜다.
파이썬에서는 모든 것이 객체(Object)이다.


  • 기본형(Immutable Type): 값 자체를 저장하며, 한 번 생성되면 변경할 수 없음
  • 참조형(Mutable Type): 값을 변경할 수 있으며, 메모리 주소를 공유할 수 있음
  • 기본형은 숫자, 문자열, 튜플과 같이 불변(immutable)한 타입
  • 참조형은 리스트, 딕셔너리, 집합과 같이 가변(mutable)한 타입
  • 기본형은 연산 시 새로운 객체가 생성되지만, 참조형은 직접 값이 변경됨
  • 기본형과 참조형 모두 = 연산자를 사용하면 변수는 실제 값을 가리키는 참조(Reference) 를 저장
  • JS, Java와 달리, 파이썬에서는 모든 객체가 스택(Stack)이 아닌 힙(Heap) 메모리에 저장된다.


1. 기본형 (Immutable Type)

자료형설명예제
int정수형a = 42
float실수형b = 3.14
bool논리형c = True
str문자열d = "Python"
tuple튜플e = (1, 2, 3)
  • 불변(Immutable): 값이 변경될 수 없으며, 연산 시 새로운 객체가 생성됨
  • id() 함수를 사용하면 객체의 메모리 주소를 확인할 수 있음
  • 문자열(str)은 자바의 String과 유사하게 불변 객체


2. 참조형 (Mutable Type)

자료형설명예제
list리스트 (배열과 유사)a = [1, 2, 3]
dict딕셔너리 (Key-Value 저장)b = {"name": "Alice", "age": 25}
set집합 (중복 없는 요소 저장)c = {1, 2, 3}
  • 가변(Mutable): 값 변경 가능하며, 동일한 객체의 상태를 수정할 수 있음
  • = 연산자로 복사하면 같은 객체를 참조
  • copy()deepcopy()를 사용하면 별도의 객체를 생성


3. 메모리 저장 방식

구분기본형 (Immutable Type)참조형 (Mutable Type)
저장 방식값 자체 저장참조(메모리 주소) 저장
값 변경 여부변경 불가 (새 객체 생성)변경 가능 (같은 객체 수정)
연산 가능 여부연산 시 새 객체 생성연산 가능, 객체 자체 변경
메모리 할당스택(Stack)힙(Heap)
  • int, float, bool, str, tuple불변 객체로 값 변경 시 새로운 객체 생성
  • list, dict, set가변 객체로 값을 변경해도 같은 객체 유지


4. 함수 호출 시 차이

  • 기본형(Immutable Type): 함수 호출 시 값이 복사되어 전달되므로, 원본 변수는 변경되지 않음
  • 참조형(Mutable Type): 함수 호출 시 주소가 전달되므로, 내부에서 값을 변경하면 원본 데이터도 변경됨
1
2
3
4
5
6
7
# 참조형 (Mutable Type)
def modify_list(lst):
    lst.append(4)

a = [1, 2, 3]
modify_list(a)
print(a)  # [1, 2, 3, 4] → 원본 리스트가 변경됨
1
2
3
4
5
6
7
# 기본형 (Immutable Type)
def modify_int(n):
    n += 1

b = 10
modify_int(b)
print(b)  # 10 → 원본 값이 변경되지 않음


5. 문자열(String)의 특이점

  • str불변(immutable) 객체이므로, 값을 변경하면 새로운 객체가 생성됨
  • 문자열 연산 (+, *)을 하면 새로운 문자열 객체가 만들어짐
  • list(str)로 변환하면 가변 객체로 변경 가능
1
2
3
4
s = "hello"
print(id(s))  # 문자열의 메모리 주소 확인
s += " world"
print(id(s))  # 새로운 문자열 객체가 생성됨 (주소가 변경됨)


6. 요약

구분기본형 (Immutable Type)참조형 (Mutable Type)
저장 방식값 자체 저장참조값(주소) 저장
값 변경불가능 (새 객체 생성)가능 (기존 객체 변경)
연산 방식연산 시 새 객체 반환연산 시 기존 객체 변경
함수 호출값 복사 (원본 영향 없음)참조 복사 (원본 변경 가능)
대표 예시int, float, str, tuplelist, dict, set


정리

  • 기본형 (Immutable Type) → 값 자체를 저장하고 복사됨
  • 참조형 (Mutable Type) → 주소(참조값)를 저장하고 공유됨
This post is licensed under CC BY 4.0 by the author.