[Python] Basic Data Types

ONE·2025년 12월 4일

Python - Basic - Data Types

Python 데이터 타입은 크게 두 가지 관점에서 분류할 수 있다.
1. 값의 구조 관점 (Single value vs Collection)
2. 변경 가능 여부 (Mutable vs. Immutable)

Python에서는 모든 데이터가 객체(object)로 관리되며, 변수는 객체를 직접 저장하는 것이 아니라 객체에 대한 참조 (reference)를 저장한다는 점이 중요하다.

1. Single Value Type vs Collection Type

Python에는 C나 Java처럼 공식적인 primitive/ non-primitive 구분이 존재하지 않는다.

Single Value Type: string, integer, float, boolean
Collection Type: array(list), hash map(dictionary), set, tuple

2. Mutable vs. Immutable

Immutable 데이터 타입의 오브젝트 생성 후 값이 절대 변하지 않는다. 값을 변경하면 기존 오브젝트를 수정하는 것이 아니라 새로운 오브젝트가 생성된다.
Mutable: list, dictionary, set

Mutable 데이터 타입은 오브젝트 생성 후 내부 값을 변경할 수 있으며, 값을 변경하면 오브젝트 자체가 메모리에서 직접 수정된다.
Immutable: string, integer, float, boolean, tuple

메모리 관점

Immutable: 값 변경시 항상 새 오브젝트 생성

a = 10
b = a
a = 20

-> a = 10
-> b = 10 
-> a = 20
-> b = 10

Mutable: 여러 변수가 한 오브젝트를 참조하면 모든 변수가 영향을 받음

a = [1,2,3]
b = a
a.append(10)

-> a = [1,2,3]
-> b = [1,2,3]
-> a.append(4)
-> a = [1,2,3,4]
-> b = [1,2,3,4]

Parameter Passing (파라미터 전달)

Immutable: 새로운 객체를 생성

def change(x):
	x += 1

a = 10
change(a)
print(a)	# 10, not changed

Mutable: 함수 내부에서도 같은 오브젝트를 수정

def change(lst):
	lst.append(100)

a = [1,2,3]
change(a)
print(a)	# [1,2,3,100], changed

Dictionary Key 사용 가능 여부

  • Immutable 데이터 타입은 값이 변하지 않으므로(hasable) dictionary key로 사용 가능하다.
  • Mutable 데이터 타입은 값 변경이 가능하기 때문에 dictionary key 사용이 불가하다.

얕은 복사와 깊은 복사

Mutable 오브젝트의 원본을 유지하고 싶을때는 복사를 통해 새로운 오브젝트를 생성해야 한다.

  • 얕은 복사 (shallow copy):
    - 최상위 레벨만 복사, 내부의 nested 오브젝트는 공유
  • 깊은 복사(Deep Copy):
    - 모든 nested 오브젝트까지 복사한다.

Immutable 오브젝는는 복사 개념이 필요없다.

함수 Parameter(인자) 기본 값의 Mutable 문제

Mutable 오브젝트를 함수의 기본 파라미터로 사용하면, 오브젝트가 함수 정의 시 단 한 번만 생성되어 이후 모든 호출에서 같은 오브젝트를 공유하는 문제가 생긴다.

Bad example

def add_item(item, lst = []):
	lst.append(item)
    return lst

add_item(1) 	# [1]
add_item(2) 	# [1,2]

Good example

def add_item(item, lst = None):
	if lst is None:
    	lst = []
	lst.append(item)
    return lst

0개의 댓글