[자료구조] mutable vs immutable in Python

파이썬은 객체지향언어이다.
그렇기 때문에 발생하는 특성이 바로 오늘 배운 내용이다.


목차(클릭 시 이동됩니다.)

파이썬이 정보를 처리하는 방법

객체지향언어, 무엇이 다를까?
다음 그림은 C와 Python의 처리 방식을 잘 보여준다.
파이썬의 정보 처리 방법


C 언어의 정보 처리 방법

두 언어의 실행 결과값은 모두 같다.

하지만 메모리 내에 들어가는 값은 조금 다르다.

파이썬에서 Frame이 Identifier, 즉 변수명이 들어가는 자리이고
이들은 메모리 속 한 곳(Object)을 '가리키는' 역할을 한다.

반면 C에서는 Stack에 Identifier와 그 값들이 같이 저장된다.


이 개념이 파이썬에서 mutable과 immutable의 독특한 특징을 만들어 낸다.
(좌)Mutable vs (우)Immutable 구분


위 표를 기억하며 다음 그림을 이해해보자.


Int형(immutable)


id 함수를 통해 객체가 메모리의 어디에 저장되어 있는지 파악해보면,
첫번째 실행줄에서 identifier a와 b는 같은 object, 10을 가리킨다.
하지만 a에서 10을 더했더니 a와 b는 서로 다른 object를 가리키게 되었다.

그 이유는 int가 immutable하기 때문이다.
파이썬에서 a에 10을 더할 때 기존에 있던 10이라는 object 자체에서 10을 더하는 것이 아니라, 새로운 object를 만들고 a가 그걸 가리키게 만든다.





그렇다면 mutable할 때는 어떨까?

List(mutable)


마찬가지로 첫번째 실행줄에서 a와 b는 같은 object, [1,2,3]이라는 list를 가리킨다.
그리고 b에 append를 하는 변형을 가했더니 a도 변했다.

이건 바로, mutable하기 때문에 발생한 현상이다.
list가 mutable하므로 b가 가리키던 object 자체가 변할 수 있었다. (실제로 id값이 동일하다)
그런데 여기서 a도 같은 object를 가리키고 있었으므로 a의 값도 변한 것이다!




이렇게 mutable과 immutable의 차이를 알아보았다.
처음 문법을 배울 때는 이해되지 않는 내용이었는데, 이렇게 배경을 이해하니 와닿는 것 같다. 앞으로 또 어떤 컴퓨터 공학적 배경이 프로그래밍에 숨겨져 있을지 기대된다.

추천글 : 수포자, 수학이 막연한 분들을 위한 수학 완벽정리(feat. 수학 잘하는 법)
[자료구조] 왜 자료구조를 배우는가?
hyeon_B

안녕하세요! AI 기술을 이용해 더 나은 세상을 만들어 나가고 싶은 과기원생 Hyeon이라고 합니다. 저는 앞으로 인공지능 시대에는 지식을 '활용'하는 능력이 중요해질 것이라고 생각합니다. 대부분의 일들은 인공지능이 뛰어난 모습을 보이지만, 인공지능은 데이터로 부터 연관관계를 학습하기 때문에 지식들을 새로 통합해서 활용하는 능력이 부족합니다. 인공지능이 뉴턴 전에 만들어졌다면 사과가 떨어지는 이유에 대답하지 못했을 것이고, 아인슈타인 전에 만들어졌다면 중력이 어떻게 생기는지 설명하지 못했을 것입니다. 따라서 앞으로 우리는 '본질'을 탐구하고 그 본질로부터 다른 곳에 적용하며 인공지능을 현명하게 활용해야 할 것입니다. 함께 인공지능 시대를 준비합시다!

댓글 쓰기

다음 이전

POST ADS1

POST ADS 2