훈훈훈

파이썬 : 가변 객체와 불변 객체 본문

파이썬/Python

파이썬 : 가변 객체와 불변 객체

훈훈훈 2020. 1. 13. 02:50

# 객체

- 파이썬은 객체라는 단위로 메모리 상에서 정보를 관리

- 객체에는 값(Value), 유형(Type), 정체성(Identity) 3가지 특성이 있다.

  > 값(Value) : 메모리에 기록된 내용, 가변 객체는 값이 변할 수 있지만 불변 객체는 변하지 않는다.

  > 유형(Type) : type() 함수를 통해 객체의 유형을 알 수 있으며, 데이터의 종류를 나타낸다.

  > 정체성(Identity) :  id()함수를 통해 알 수 있으며, 각각의 객체를 식별하기 위한 고유번호(즉, 메모리 상에 위치한 주소 값)

- 예시 

>>> year = 2020 

year라는 변수는2020 이라는 값을 갖는 객체를 가리키는 역할을 한다.

즉, 객체는 메모리에 존재하는 각각의 데이터를 가리킨다.

 

만약, year += 1을 할 경우 year라는 변수는 2021 값을 가지는게 아니라 2021 객체를 가르키게 된다.

 

# 가변 객체와 불변 객체

- 가변 객체 : 객체에 할당된 값을 수정할 수 있다.

   > 가변 객체 타입으로는 list, set, dick이 존재한다. 

- 불변 객체 : 객체에 할당된 값을 수정할 수 없다.

   > 불변 객체 타입으로는 int, float, bool, str, tuple 등이 존재한다. 

- 예시 

1. 가변 객체 

위 예제를 살펴보면 test라는 변수의 ID 값과 리스트에 값을 추가해주는 함수를 통해 수정된 값을 가진 test의 ID 값은 동일한 것을 알 수있다. 리스트 타입의 객체(가변 객체)는 call by reference로 동작됬었음을 알 수 있다.

 

2. 불변 객체

위 예제를 살펴보면 test라는 변수의 ID값과 함수 호출 후 test의 ID 값은 동일한 것을 알 수 있지만, 함수 호출 전후의 값이 동일한 것을 알 수 있다. 즉, 정수 타입의 객체(불변 객체)는 call by value로 동작되었음을 알 수 있다. 

 

 

 

Comments