본문 바로가기
Python/객체지향 및 자료구조

가변 타입 / 불변 타입

by hooni40 2021. 7. 4.
728x90
반응형

안녕하세요, 오늘은 Python 객체에서 가변 타입 객체와 불변 타입 객체에 대해 정리해보겠습니다.

 

가변 타입 객체는 한번 생성한 인스턴스의 속성이 변경 가능한 것을 말하고 불변 타입 객체는 한번 생성한 인스턴스의 속성이 변경 불가한 것을 말합니다. 가변 타입의 종류로는 리스트 클래스가 있고 불변 타입의 대표적인 예로는 튜플 클래스가 있습니다. 아래 코드를 보며 가변 타입과 불변 타입을 자세히 살펴보겠습니다.

 

mutable_object = [1, 2, 3] # 리스트
immutable_object = (1, 2, 3) # 튜플

mutable_object[0] = 4
print(mutable_object)  #[4, 2, 3] 출력이 된다!

immutable_object[0] = 4
print(immutable_object) # TypeError가 발생한다! 튜플은 불변 타입!

 

리스트 변경은 출력되지만 튜플은 에러 발생

위와 같이 튜플은 불변 타입이기 때문에 요소를 변경하고자 할 때 에러가 발생합니다. 하지만 불변 타입이라도 변수가 가리키는 객체 자체는 바꿀 수 있습니다. 이럴때는 새로운 튜플 객체를 생성하여 할당시켜줌으로써 변수를 바꿔줄 수 있습니다. 조금 더 쉽게 설명을 하자면 우리가 처음에 변수를 정의하여 튜플을 할당하면 메모리 내에서 튜플 객체A가 생성이 되는데요, 이 생성된 튜플 객체는 불변 타입 객체이기 때문에 속성을 변경할 수 없습니다. 그렇기에 새로운 튜플 객체 B를 생성하여 변수에 할당해 주면 변수는 튜플 B를 가리키게 되는 것입니다! 이것도 아래 코드와 결과 화면을 통해 살펴보겠습니다.

tuple_x = (6, 4)
tuple_x = (4, 3)  # 새로운 튜플 객체(4, 3)를 가리킨다!
tuple_x = (4, 1, 7) # 새로운 튜플 객체(4, 1, 7)를 가리킨다!

print(tuple_x) # (4, 1, 7) 출력!

 

 

이제 가변 타입 객체인 리스트를 생성하여 요소들을 하나씩 넣으면서 가변 타입에 대해 추가 설명해보겠습니다. 아래 코드에서는 빈 리스트 list_x를 생성한 후 append 함수를 이용해 요소를 넣어보았습니다. 그 후 출력을 하면 Error 없이 출력되는 것을 확인할 수 있습니다!

list_x = []
list_x.append(4)
list_x.append(1)
list_x.append(7)

print(list_x)

 

 

위에서 가변 타입 객체와 불변 타입 객체에 대해 정리 및 예제를 통해 확인해 보았는데요, 가변 타입으로는 리스트, 튜플이 있고 불변 타입으로는 튜플, 정수, 실수, 문자열, Boolean이 있습니다! 추가로 우리가 직접 작성하는 클래스의 경우 가변 타입입니다. 즉, 직접 클래스를 통해 인스턴스를 생성하면 나중에 인스턴스 속성을 바꿔줄 수 있습니다

 

728x90
반응형

'Python > 객체지향 및 자료구조' 카테고리의 다른 글

객체 생성 연습  (0) 2021.07.08
클래스 메소드  (0) 2021.07.03
__str__ 메소드  (0) 2021.05.10
__init__ 메소드  (0) 2021.05.08
인스턴스 메소드 / 변수  (0) 2021.05.07

댓글