반응형
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의 차이에 대해 알아보았습니다.
감사합니다:-)
'데이터 분석 관련' 카테고리의 다른 글
의사결정나무 시각화, 어떻게 읽어야 할까? - 의사결정나무 시각화 해석하는 방법 (0) | 2025.03.12 |
---|---|
쉽게 배우는 의사결정나무(Decision Tree) - 주피터 노트북으로 개념부터 실습까지! (1) | 2025.03.08 |
[통계 개념] 정규분포, 첨도와 왜도 알아보기 (0) | 2025.02.25 |
pandas(6) : 날짜 데이터 변환 및 변환 오류 / 주피터노트북 (0) | 2025.02.19 |
pandas (5) : 데이터프레임 생성, 데이터프레임 필터링 / 주피터 노트북 (0) | 2025.02.13 |