Python 가변객체, 불변객체

허정원·2021년 1월 27일
0

TIL

목록 보기
7/15

객체?

파이썬의 모든것들은 여러 속성들과 행동을 가지고 있는 데이터인 객체이다.

가변객체 와 불변객체

가변객체(Mutable object): 생성된 후 상태를 변경할 수 있는 객체이다.
불변객체(Immutable object): 생성된 후 상태를 변경할 수 없는 객체이다.

자료형을 객체 성격에 따라 나누면

가변객체: list, set, dict
불변객체: int, float, complex, bool, str, tuple


불변객체

객체가 가진 정보들을 변경 불가능한 객체를 뜻한다.
하지만 변수를 통해서 객체를 다루다 보면 마치 값이 변한 것처럼, 혹은 변경 가능한 것처럼 보일 때가 있다.

Oni = 1
Oni = 2
print(Oni)
>>>2

위에 예시는 객체의 값이 변한게 아니라, 변수가 담고 있는 객체가 바뀐 것이다.

💡 id() 함수는 객체별로 가지는 유일한 숫자를 출력해준다. 이를 통해 객체가 변했는지 알 수 있다.

Oni = 1
print(id(Oni))
Oni = 2
print(id(Oni))
>>>4500650288
   4500650320

만약 객체의 값이 변했다면 동일 id 값이 나왔을 것이다.
숫자형 뿐 아니라 str, tuple ... 에서도 동일한 결과가 나온다.

str타입이 가지는 메소드중 몇가지는 이처럼 새로운 값을 만들어 낸다.

Oni = "onion"
print(Oni)
print(id(Oni))
Oni = Oni.upper()
print(Oni)
print(id(Oni))

>>>onion
   4413675184
   ONION
   4413998000

가변객체

불변객체와 달리 객체가 가진 값들을 변경할 수 있는 객체이다.

Oni = [2, "onion", 100, "text"]
print(Oni)
print(id(Oni))
Oni[2] = "백"
print(Oni)
print(id(Oni))

>>>[2, 'onion', 100, 'text']
   4537906560
   [2, 'onion', '백', 'text']
   4537906560

동일한 id 값을 확인 할 수 있다.

가변객체들은 값을 변경하는 메소드를 실행시키면 새로운 객체를 리턴하는게 아니라 기존의 객체를 변경시키기 때문에 리턴값은 None이 출력된다.

Oni = [100, 3, 100, 1, 16, 9]
print(Oni)
Oni_sort = Oni.sort()
print(Oni_sort)

>>>[100, 3, 100, 1, 16, 9]
   None

메서드를 실행해도 객체의 id는 변하지 않습니다.

Oni = [100, 3, 100, 1, 16, 9]
print(Oni)
print(id(Oni))
Oni_sort = Oni.sort()
print(Oni)
print(id(Oni))

>>>[100, 3, 100, 1, 16, 9]
   4478948736
   [1, 3, 9, 16, 100, 100]
   4478948736

0개의 댓글