본문 바로가기
데이터 분석 관련

파이썬: mutable과 immutable 구분하기 / PyCharm 활용

by cjangela 2025. 3. 5.
반응형

1. mutable

1) 의미

  • mutable을 영어로 번역하면 '변할 수 있는, 잘 변하는'이라는 의미를 가집니다.
  • 즉, mutable은 객체를 생성한 후에 내용을 변경할 수 있는 데이터 타입을 의미합니다.
  • 이러한 mutable 객체는 데이터를 변경하더라도 메모리 주소가 유지된다는 특징을 가지고 있습니다.

2) 장단점

(1) 장점

  • mutable은 데이터를 직접 수정할 수 있어 성능이 좋고, 유연한 데이터 조작이 가능합니다.
  • 반복적인 변경이 필요한 경우, 즉 실시간으로 데이터를 업데이트해야 하거나 할 경우에 적합합니다.

(2) 단점

  • 같은 객체를 여러 곳에서 활용할 때는 변경 시 다른 곳에도 영향을 주어 예측하기가 어렵습니다.
  • 즉, 하나의 객체를 여러 곳에서 동시 수정할 경우에 예상치 못한 결과가 발생할 수 있다는 것입니다.

3) 대표적인 mutable 타입

  • list (리스트)
  • dict (딕셔너리)
  • set (세트)
  • bytearray

4) 예제

# 리스트 데이터 생성 및 메모리 주소 확인
korea = ["서울", "부산", "인천"]
print("입력 데이터:", korea)
print("메모리 주소:", id(korea))

# 데이터 변경
korea[1] = "울산"

# 변경된 데이터 및 메모리 주소 출력
print("변경된 데이터:", korea)
print("변경된 메모리 주소:", id(korea))
[결과 값]
입력된 데이터: ['서울', '부산', '인천']
메모리 주소: 1370323722816
변경된 데이터: ['서울', '울산', '인천']
변경된 메모리 주소: 1370323722816
  • 결과를 보면, 리스트의 데이터가 변경되었지만 메모리 주소는 그대로 유지된 것을 확인할 수 있습니다. 

2. immutable

1) 의미

  • immutable을 영어로 번역하면 '변경할 수 없는, 불변의'라는 의미를 가집니다.
  • 즉, immutable은 객체를 생성한 후에는 내부의 값을 변경할 수 없는 데이터 타입을 의미합니다. 
  • immutable 객체의 값을 변경하고자 할 때는, 기존 객체에서 수정하는 것이 아니라 새로운 객체를 생성하는 것입니다. 그러면 수정 전과 수정 후의 메모리 주소 값이 달라지는 것을 확인할 수 있습니다.

2) 장단점

(1) 장점

  • 같은 값을 객체는 같은 메모리 주소를 가지기에, 메모리 관리에 유리합니다.
  • 또한 mutable과는 반대로 데이터가 변경될 위험이 없기에 예측 가능한 코드 작성이 가능하며, 하나의 데이터를 다른 곳에서 작업해도 보다 안전하게 사용할 수 있습니다.

(2) 단점

  • 데이터를 변경하고자 할 때는 새로운 객체를 생성해야 하며, 이는 유연성이 떨어지게 됩니다.
  • 또한, 변경할 때마다 새로운 객체를 생성해야 하기에 메모리 사용량이 증가하게 됩니다.

3) 대표적인 immutable 타입

  • int (숫자형)
  • float (실수형)
  • bool (부울형)
  • str (문자열)
  • tuple (튜플)
  • frozenset (프로즌셋)
  • bytes

4) 예제

(1) 숫자형 데이터 예제

# 숫자형 데이터 생성 및 메모리 주소 확인
age = 30
print("입력 데이터:", age)
print("메모리 주소:", id(age))

# 숫자형 연산 및 변경된 메모리 주소 확인
age = age + 1
print("변경된 데이터:", age)
print("변경된 메모리 주소:", id(age))

# 숫자만 동일한 다른 데이터 출력
length = 30
print("30 메모리 주소:", id(length))
[결과 값]
입력 데이터: 30
메모리 주소: 140725021828936
변경된 데이터: 31
변경된 메모리 주소: 140725021828968
30 메모리 주소: 140725021828936
  • 결과를 보면 정수형 변수인 age의 값에 1을 더하자 기존 메모리 주소를 유지하는 것이 아닌 새로운 메모리 주소를 할당받았습니다.
  • 하지만 입력 값이 30이라는 두 개의 변수는 같은 메모리 주소를 공유하는 것을 확인할 수 있습니다.

(2) 튜플 데이터 예제

# 튜플 데이터 생성 및 메모리 주소 확인
korea = ("서울", "부산", "인천")
print("입력 데이터:", korea)
print("메모리 주소:", id(korea))

# 데이터 변경
korea = ("대전", "울산", "광주")

# 변경된 데이터 및 메모리 주소 출력
print("변경된 데이터:", korea)
print("변경된 메모리 주소:", id(korea))
[결과 값]
입력 데이터: ('서울', '부산', '인천')
메모리 주소: 2880715686336
변경된 데이터: ('대전', '울산', '광주')
변경된 메모리 주소: 2880715686144
  • 다음 출력 값들을 확인해 보면, 데이터가 변경된 후에 메모리 주소가 전부 변경된 것을 확인할 수 있습니다.

3. mutable과 immutable 내용 요약

구분 mutable immutable
의미 생성된 후 값 변경 가능
값 변경 시 동일한 메모리 주소 유지
생성된 후 값 변경 불가능
값 변경 시 새로운 메모리 주소 할당
장점 값 수정 용이, 유연한 데이터 조작가능  메모리 관리 유리,
동시 수정 시에도 데이터 안정성이 높음 
단점 동시 수정 시 서로 영향을 미쳐
예상치 못한 결과 발생 가능 
변경할 때마다 새로운 객체 생성으로 메모리 사용량 증가
대표 타입 list, dict, set, bytearray int, float, bool, str, tuple, frozenset, bytes

mutable과 immutable의 차이에 대해 알아보았습니다.

감사합니다:-)