python - 가변객체, 불변객체

hamingu·2021년 3월 15일
4

✔객체란?

파이썬 문서에는 객체(objects)를 파이썬이 데이터를 추상화한 것으로 정의하고 있다.
즉 쉽게 말하면 파이썬 내의 모든 데이터 타입을 객체라고 보면 된다.

모든 객체는 값(value), 유형(type), 정체성(identity) 3가지의 특성을 가지고 있다.



✔객체의 특성

  • 값(value) :메모리에 할당된 내용. 객체에 따라 이 값이 변할 수도 있으며, 절대 변하지 않을 수도 있다.
  • 유형(type) : 객체의 유형. 데이터가 어떤 종류인지를 뜻하며 type() 함수를 통해 유형을 확인할 수 있다. 이 데이터 유형(type)에 따라 객체의 값이 변할 수 있는지 없는지 알 수 있다.
  • 정체성(identity) : 객체의 id값 더 쉽게 말해서 메모리상에 객체가 저장된 주소 값으로 봐도 좋다. id() 함수를 통해 id값을 확인할 수 있다.

✔가변객체(mutable), 불변객체(immutable)

객체의 유형에 따라 그 값을 변경할 수도 변경할 수 없을 수도 있다고 하였다.
여기서 변경 가능한 객체를 가변객체(mutable) 변경할 수 없는 객체를 불변객체(immutable) 이라 한다.

👇가변객체 종류

List

list = ["리스트는", "변할 수 없다"]

list[1] = "변할 수 있다"
print(list)
#출력 ["리스트는", "변할 수 있다"]

dict

dict = {"name" = "박하민"}

dict["name"] = "김하민"

print(dict)
#출력 {"name":"김하민"}

👇불변객체 종류

tuple

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이라는 새로운 객체가 만들어짐을 증명한다.


🚨 본 게시글은 스스로 배운 내용을 기억하고 깊게 이해하기 위해 작성한 글입니다. 사용된 예제가 실제와 달리 비효율적일 수 있으니 양해 부탁드립니다.

profile
프로그래밍구

0개의 댓글