코딩/Python
[Python] 파이썬 불변객체와 가변객체 (Immutable/Mutable Object)
코딩왕 코주부
2022. 10. 23. 17:56
반응형
안녕하세요 코딩왕 코주부입니다.
파이썬의 객체에 대한 기록입니다.
불변 객체와 가변 객체의 구분은 id(object)
함수를 이용할 수 있습니다.
- 불변 객체 (Immutable Object)
- Boolean - True / False
- int - 1
- float - 1.2
- tuple - (2, 4, 'hi', True)
- 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)
- list - [1, 2, 3, '코봉', False]
- set - {2, 5, 6}
- 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' 으로 변경된 걸 확인할 수 있습니다.
이를 가변 객체라고 합니다.
공부한 걸 정리하는 것이라 잘못된 내용이 있을 수 있습니다.
댓글 주시면 수정하도록 하겠습니다.
감사합니다.

반응형