mutable
변할 수 있는, 잘 변하는immutable
변경할 수 없는, 불변의 (=unchangeable)파이썬에서 문자열 string
이 대표적인 immutable한 객체라고 한다.
문자열을 변경할 수가 없다고?
string = '이게 안변한다고?'
print(string)
string = '이게 출력되는데?'
print(string)
결과
그렇다면, 정말 어떤 의미일까??
string = '이게 안변한다고?'
print(string)
print(f'Address of string : {id(string)}')
string = '이게 출력되는데?'
print(string)
내용을 변경시키니 새로운 string 객체를 생성했음을 알 수 있다.
아래와 같이 좀 더 직관적으로 확인할 수 있다.
string[0] = '그'
print(string)
'이게 출력되는데?'
부분을 '그게 출력되는데?'
로 바꾸려 한다.
리스트는 mutable하다는 말을 자연스레 듣게 된다.
확인해보자.
mutable_list = [1, '가', True, 'node']
print(f'Address : {id(mutable_list)}')
mutable_list[2] = False
print(f'Address : {id(mutable_list)}')
리스트의 경우, 요소를 변경시켰다고 해서
새로운 리스트(객체)를 생성하지 않는다.
mutable 혹은 immutable 한 객체 등과 같은 개념을 왜 알아야 할까?
점유하는 메모리 때문이다.
특히, 서비스를 배포했을때 문제가 될 수가 있다.
예시로 아래와 같은 코드를 보자.
product_code = ['100030001', '100040002', '120030301', '220034001', '400030110']
output = '제품번호 : \n'
for code in product_code:
output += '\t{}\n'.format(code)
print(output)
결과
여기서 무엇이 문제가 되었을까?
이를 확인해보기 위해 id 값을 추가했다.
output += '\t{}, {}\n'.format(code, id(code))
새로운 관점을 얻게 됐으며, 이를 염두에 두고 개발을 해야겠다.
예를 들어, 리스트의 요소가 십만 개라면
각 요소가 메모리를 점유하고 있음을 인지해야 한다.