코딩/Python

[Python] 파이썬 불변객체와 가변객체 (Immutable/Mutable Object)

코딩왕 코주부 2022. 10. 23. 17:56
반응형

안녕하세요 코딩왕 코주부입니다.

 

파이썬의 객체에 대한 기록입니다.

 

불변 객체와 가변 객체의 구분은 id(object) 함수를 이용할 수 있습니다.

 

  • 불변 객체 (Immutable Object)
      1. Boolean - True / False
      2. int - 1
      3. float - 1.2
      4. tuple - (2, 4, 'hi', True)
      5. str - 'Brian'

불변 객체 중 str(string) - 'Brian' 으로 예를 들어보겠습니다. 

id('Brian') #4331834096

name = 'Brian'
id(name) #4331834096

boy = name
id(boy) #4331834096

id('Brian'), id(name), id(boy)
#4331834096, 4331834096, 4331834096

str 값이 일정(='Brian')하면 변수의 이름이 바뀌더라도

값을 갖고 있는 변수를 계속 참조 만 하기 때문에 

id(object) = 4331834096 는 동일합니다.

 

기존에 'Brian'으로 할당되어 있는 name 변수에  name = 'John'

을 선언한 후 boy의 id를 확인해보겠습니다.

name = 'Brian' #id : 4331834096
boy = name
print("name :", name, "boy :", boy)
# name : Brian boy : Brian

name = 'John'
print("name :", name, "boy :", boy)
# name : John boy : Brian

print("John id :", id(name))
# John id : 4356252336

print("Brian id :", id(boy))
# Brian id : 4331834096

위와 같이 boy = name ('Brian')으로 할당 후 

name의 값을 'Brain' -> 'John'으로 변경하더라도

boy 객체는 'John'이 아닌 'Brian'의 값을 참조하여 id가 새로 할당되지 않습니다. 

이를 불변 객체라고 합니다.

 

  • 가변 객체 (Mutable Object)
    1. list - [1, 2, 3, '코봉', False]
    2. set - {2, 5, 6}
    3. dict - {'key' : 'value'}

 

반면 가변 객체는 불변 객체와 반대의 개념입니다.

가변 객체 중 하나인 list() 로 예를 들어 보겠습니다.

a = [1, 2, '코봉', False]
id(a)
# 4356296640

b = a
b[2] = 'Brian'
print(b)
# [1, 2, 'Brian', False]

id(b)
# 4356296640

print(a)
# [1, 2, 'Brian', False]

위와 같이 a 를 참조하는 b를 가변하면,

id(b) #4356296640가 가변 전 a의 id(a) #4356296640와 일정하게 유지되고

a의 값도 2번 인덱스가 '코봉' -> 'Brian' 으로 변경된 걸 확인할 수 있습니다.

이를 가변 객체라고 합니다.

 

공부한 걸 정리하는 것이라 잘못된 내용이 있을 수 있습니다.

댓글 주시면 수정하도록 하겠습니다.

 

감사합니다.

반응형