파이썬 문서에는 객체(objects)를 파이썬이 데이터를 추상화한 것으로 정의하고 있다.
즉 쉽게 말하면 파이썬 내의 모든 데이터 타입을 객체라고 보면 된다.
모든 객체는 값(value), 유형(type), 정체성(identity) 3가지의 특성을 가지고 있다.
객체의 유형에 따라 그 값을 변경할 수도 변경할 수 없을 수도 있다고 하였다.
여기서 변경 가능한 객체를 가변객체(mutable) 변경할 수 없는 객체를 불변객체(immutable) 이라 한다.
list = ["리스트는", "변할 수 없다"]
list[1] = "변할 수 있다"
print(list)
#출력 ["리스트는", "변할 수 있다"]
dict = {"name" = "박하민"}
dict["name"] = "김하민"
print(dict)
#출력 {"name":"김하민"}
tuple = ("튜플은", "정말 변할 수 없나?")
tuple[1] = "변해라!"
#튜플[1]에 위치한 "정말 변할 수 없나?" 값을 "변해라!"로 수정 시도할 시
# TypeError: 'tuple' object does not support item assignment 발생("튜플" 객체는 항목 할당을 지원하지 않는다.)
a = 10
b = "문자열"
a[0] = 2
b[0] = "문자열2"
# 위 방법으로 변경 시 마찬가지로 int, str 객체는 항목 할당을 지원하지 않는다는 오류가 나온다
# 다만 숫자열, 문자열은 애초에 인덱싱을 지원하지 않으니 다른 방법으로 더 확인해보자
a = 10
b = a
id(num1) == id(num2) # True 출력
a = 6
id(num1) == id(num2) # False 출력
id 는 객체의 값이 저장된 주소이다.
객체의 값만 변경되는 경우 id(주소)는 변하지 않는다.
즉 위 숫자, 문자열 예제에서 num1의 id 값이 변경된 것은
a의 객체 값이 변경된 것이 아닌
a = 6이라는 새로운 객체가 만들어짐을 증명한다.
🚨 본 게시글은 스스로 배운 내용을 기억하고 깊게 이해하기 위해 작성한 글입니다. 사용된 예제가 실제와 달리 비효율적일 수 있으니 양해 부탁드립니다.