[기업협업 - koodon] mutable vs immutable

hyuckhoon.ko·2020년 8월 8일
0

What I learned in wecode

목록 보기
102/109

1. mutable 과 immutable

  • (adjective) mutable 변할 수 있는, 잘 변하는
  • (adjective) immutable 변경할 수 없는, 불변의 (=unchangeable)

파이썬에서 문자열 string이 대표적인 immutable한 객체라고 한다.

문자열을 변경할 수가 없다고?

string = '이게 안변한다고?'
print(string)
  
string = '이게 출력되는데?'
print(string)

결과

그렇다면, 정말 어떤 의미일까??


2. id 값 확인해보기

string = '이게 안변한다고?'
print(string)
print(f'Address of string : {id(string)}')
  
string = '이게 출력되는데?'
print(string)

내용을 변경시키니 새로운 string 객체를 생성했음을 알 수 있다.

아래와 같이 좀 더 직관적으로 확인할 수 있다.

string[0] = '그'
print(string)

'이게 출력되는데?' 부분을 '그게 출력되는데?'로 바꾸려 한다.


3. mutable한 리스트

리스트는 mutable하다는 말을 자연스레 듣게 된다.

확인해보자.

mutable_list = [1, '가', True, 'node']
print(f'Address : {id(mutable_list)}')

mutable_list[2] = False
print(f'Address : {id(mutable_list)}')

리스트의 경우, 요소를 변경시켰다고 해서
새로운 리스트(객체)를 생성하지 않는다.



4. 왜 알아야 할까?

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))

새로운 관점을 얻게 됐으며, 이를 염두에 두고 개발을 해야겠다.

예를 들어, 리스트의 요소가 십만 개라면
각 요소가 메모리를 점유하고 있음을 인지해야 한다.

0개의 댓글