Python

[Python] 불변 객체 (Immutable)

비번변경 2023. 12. 14. 16:58

객체 종류

Python에서는 객체를 두 가지 종류로 구분할 수 있다.

  • Mutable : 가변객체. 상태를 변경할 수 있는 객체
  • Immutable : 불변객체. 상태를 변경할 수 없는 객체

여기서 상태란 값을 의미한다. 즉, 어떤 변수에 값을 할당하고 갱신할 때 저장된 값의 데이터형의 종류에 따라 동작방식이 다르다.

이해해 둘 필요가 있어 보여 이 글에서는 불변 객체에 대해 정리한다.

 

 

불변(Immutable) 객체 특징

1. 변수에 할당한 값을 변경하면 변수가 참조하는 메모리 주소가 달라진다.

a = "python2"
print(f'a={a}, id(a)={id(a)}')

a = "python3"
print(f'a={a}, id(a)={id(a)}')

 

위의 코드는 다음과 같은 순서로 동작한다.

  1. 문자열 객체 'python2'가 메모리 주소 3075980496240에 할당되고 해당 객체를 a라는 변수가 참조한다.
  2. 문자열 객체 'python3'가 메모리 주소 3075980496176에 할당되고 해당 객체를 a라는 변수가 참조한다.
  3. 어떤 변수로도 참조되지 않는 문자열 객체 'python2'는 가비지 컬렉터에 의해 자동으로 메모리에서 소멸된다.

 

2. 같은 값을 할당한 변수는 같은 메모리 주소를 참조한다.

a = "python2"
b = "python2"
print(f'a={a}, id(a)={id(a)}')
print(f'b={b}, id(b)={id(b)}')

 

3. 어떤 변수를 다른 변수에 복사하면 두 변수는 같은 메모리 주소를 가리킨다.

a = "python2"
b = a
print(f'a={a}, id(a)={id(a)}')
print(f'b={b}, id(b)={id(b)}')

 

4. 어떠한 변수를 복사한 후, 변숫값이 달라져도 다른 변수에 영향을 주지 않는다.

a = "python2"
b = a
print(f'a={a}, id(a)={id(a)}')
print(f'b={b}, id(b)={id(b)}')

print('\n--값 갱신--')
a = "python3"
print(f'a={a}, id(a)={id(a)}')
print(f'b={b}, id(b)={id(b)}')

 

 

참고 문서

https://wikidocs.net/91520

https://blockdmask.tistory.com/570

https://wikidocs.net/32277