mutable & immutable

yuns_u·2021년 9월 26일
0

python 변수 mutable과 immutable의 차이

변수

변수는 객체를 가리킨다.

hundred = 100

이라는 것이 있다면 컴퓨터 메모리에 100이라는 값이 저장되고 hundred는 100이 저장된 메모리의 위치를 가리킨다. 즉, 100이라는 정수형 객체를 hundred라는 변수가 가리키고 있는 것이다.

mutable, immutable 모두 변수에 값이 할당 될때에는 변수에 객체를 할당할 때 쓰이는 변수의 주소값인 레퍼런스를 할당하게 된다. 반면 값이 변경될 때 mutable 객체를 할당했던 변수는 원래의 객체의 레퍼런스를 유지하지만 immutable 객체의 레퍼런스를 할당받은 변수는 변경된 객체의 새로운 레퍼런스를 변수가 할당받게 된다.

mutable, immutable

mutable은 값이 변한다는 뜻이고 Immutable은 값이 변하지 않는다는 의미이다.
자료형마다 특징이 다르며 mutable과 immutable의 차이를 잘 알아둘 필요가 있다. 왜냐하면 이 객체의 변경여부로 인해 파이썬에서 객체와 관련된 동작방식이 달라지기 때문이다.

간단하게 말하자면 mutable은 변경가능한 객체, immutable은 변경불가능한 객체이다.

아래의 표는 새로비라는 블로그에서 정리한 파이썬에서 쓰이는 자료형들과 Mutable, immutable 객체인지를 나타내는 표이다.

파이선에서 제공하는 자료형 외에 파이썬 유저가 직접 만드는 클래스는 기본적으로 mutable하다.

각 자료형마다 mutable한 것과 immutable한 것의 차이와 작동되는 양상을 잘 정리한 블로그가 있어서 해당 블로그의 자료를 조금 더 정리해보았다. 원본은 이곳이다. mutable과 immutable의 차이

  • integer, float 등의 숫자형(number): Immutable

  • string (문자열) : Immutable

  • list : mutable

  • tuple :mutable

  • dictionary : mutable

추가

리스트의 [:]나 deepcopy 함수를 이용하면 같은 객체를 공유하지 않도록 사용 가능하다.

#copy 모듈 import
import copy

#리스트
x = [1, 2, 3]

#x 변수가 저장하고 있는 주소값 대입
y = x

#x와 z가 같은 객체를 공유하지 않도록 설정. (리스트만 해당 기능 가능)
z = x[:]

# deepcopy를 사용하면 x와 deepcody된 변수가 같은 객체를 공유하지 않는다.
dcpy = copy.deepcopy(x)

#확인 방법
print id(x)
print id(y)
print id(z)
print id (dcpy)

id는 객체의 고유 레퍼런스를 출력하는 함수이다.
이 Id를 통해 list가 변경되었을 때 변수들이 같은 객체를 참조하는지 확인할 수 있다.

정리

immutable과 mutable 속성에 따라 변수가 함수의 매개변수로 전달될 때 원래 입력 변수값이 변경되는지 안되는지의 여부가 결정된다.

이는 call-by-value, call-by-reference와 동일한 개념이라고 한다.

profile
💛 공부 블로그 💛

0개의 댓글