객체 종류
Python에서는 객체를 두 가지 종류로 구분할 수 있다.
- Mutable : 가변객체. 상태를 변경할 수 있는 객체
- Immutable : 불변객체. 상태를 변경할 수 없는 객체
여기서 상태란 값을 의미한다. 즉, 어떤 변수에 값을 할당하고 갱신할 때 저장된 값의 데이터형의 종류에 따라 동작방식이 다르다.
2023.12.14 - [Python] 불변 객체 (Immutable)에서는 불변 객체에 대해서 정리했는데 이 글에서는 가변 객체에 대해 정리한다.
가변(Mutable) 객체
1. 변수에 할당한 값이 달라져도 변수가 참조하는 메모리 주소가 달라지지 않는다.
a = ["python2", "python3"]
print(f"""a={a}
id(a)={id(a)}""")
a.append('python4')
print(f"""a={a}
id(a)={id(a)}""")
리스트의 각 원소는 문자열 객체를 참조하는 구조로 되어 있다.
따라서 리스트에 원소를 추가하거나 삭제해도 리스트 객체의 시작 주소는 변경되지 않는다.
2. 여러 변수에 같은 값을 할당해도 변수마다 별개의 메모리 주소를 참조한다.
a = ["python2", "python3"]
b = ["python2", "python3"]
print(f"""a={a}, id(a)={id(a)}""")
print(f"""b={b}, id(b)={id(b)}""")
3. 어떤 변수를 다른 변수에 복사하면 두 변수는 같은 메모리 주소를 참조한다.
a = ["python2", "python3"]
b = a
print(f"""a={a}, id(a)={id(a)}""")
print(f"""b={b}, id(b)={id(b)}""")
따라서 두 변수를 같은 값으로 초기화하는 것과 변수를 복사하는 것은 다른 동작이다.
4. 어떤 변수를 복사한 후, 변숫값이 달라지면 다른 변수에도 영향을 준다.
a = ["python2", "python3"]
b = a
print(f"""a={a}, id(a)={id(a)}""")
print(f"""b={b}, id(b)={id(b)}""")
print('\n--값 갱신--')
a.append('python4')
print(f"""a={a}, id(a)={id(a)}""")
print(f"""b={b}, id(b)={id(b)}""")