졍
지영이 블로그
졍
전체 방문자
오늘
어제
  • 분류 전체보기 (95)
    • 네트워크 (12)
    • 시스템설계 (6)
    • AWS (7)
    • Elasticsearch (3)
    • Python (5)
    • 자료구조, 알고리즘 (9)
    • 코딩테스트 (29)
    • NCP (8)
    • 운영체제 (7)
    • 개인 프로젝트 (8)
    • Github (1)
    • 여행 (0)
      • 2024동유럽 (0)
    • 대학원 (0)
      • 논문정리 (0)

최근 글

최근 댓글

hELLO · Designed By 정상우.
졍

지영이 블로그

[Python] Mutable, Immutable 차이
Python

[Python] Mutable, Immutable 차이

2023. 6. 7. 19:07

Python의 Dictionary타입은 Key, Value값을 가지는데, 이때 Key는 Immutable, Value는 Mutable 한 값을 가진다.

전에 Immutable과 Mutable의 차이에 대해 공부한 적 있었는데, 오랜만에 보니 어렴풋이 '바꿀 수 없는 값 / 바꿀 수 있는 값' 정도로만 기억이 나서 다시 공부하고 기록을 남겨보려고 한다.


먼저 Mutable한 객체와 Immutable한 객체엔 어떤 것이 있는지 표로 살펴보자.

구분 Type
Immutable int, float, string, tuple, bool
Mutable list, dict, set

 

Immutable

Python에서 Immutable한 객체는 '수정이 불가능 한 타입'을 의미한다.

코드로 바로 살펴보도록 하자.

a = 'hello'
print(f'a의 주소값: {id(a)}')

a = 'hello2'
print(f'a의 주소값: {id(a)}')

 

변수 a는 string을 담는 객체이다. 따라서 객체 a는 immutable하다.

Immutable하기 때문에 값을 수정하면, 새 주소(3632)에 새 값이 생성되고 a는 새 주소를 가리키게 된다.

이때 기존 주소(3504)는 아무 객체도 자신을 참조하지 않게 되므로 가비지 컬렉터에 의해 자동으로 메모리에서 소멸한다.

 

Mutable

Mutable은 '수정이 가능한 객체'를 의미한다. 예제로 살펴보자.

a_list = [1, 2]
print(f'a_list의 주소값: {id(a_list)}, a_list: {a_list}')

a_list[0] = 3
print(f'a_list의 주소값: {id(a_list)}, a_list: {a_list}')

변수 a_list는 list를 담는 객체이다. 따라서 객체 a_list는 mutable하다.

Mutable하기 때문에 값을 수정하면, 값이 바뀌어도 주소 값은 그대로 유지된다.

 

 

그렇다면 다음 코드의 결과는 어떻게 될까?

a_list = [1, 2]
print(f'a_list의 주소값: {id(a_list[0])}, a_list: {a_list}')

a_list[0] = 3
print(f'a_list의 주소값: {id(a_list[0])}, a_list: {a_list}')

결과는 다음과 같다.

a_list[0]의 주소값이 달라진다!

처음엔 list는 mutable한데 왜 주소값이 달라지는건가 싶었다.

그런데 파이썬에서는 다음과 같이 값을 참조한다.

출처: https://wikidocs.net/91520

a_list의 주소는 그대로지만, a_list[0]이 참조하는 int 값(immutable)이 바뀌면서 다른 주소를 가리키게되는 것이다.

 

 

'Python' 카테고리의 다른 글

[Python Framework] 파이썬 프레임워크와 웹서버 연동 - CGI, WSGI, ASGI 차이  (0) 2023.06.16
[Django] 테스트 코드 작성해보기  (0) 2023.06.03
[Flask] MVC pattern  (0) 2023.05.06
[Python] Set과 List의 시간 복잡도 차이  (0) 2023.05.04
    졍
    졍

    티스토리툴바