객체 종류
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)}')
위의 코드는 다음과 같은 순서로 동작한다.
- 문자열 객체 'python2'가 메모리 주소 3075980496240에 할당되고 해당 객체를 a라는 변수가 참조한다.
- 문자열 객체 'python3'가 메모리 주소 3075980496176에 할당되고 해당 객체를 a라는 변수가 참조한다.
- 어떤 변수로도 참조되지 않는 문자열 객체 '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://blockdmask.tistory.com/570