본문 바로가기
CS/Interview

불변형 자료형과 변형 자료형

by Shark_상어 2023. 2. 16.
728x90

파이썬의 자료형에는 불변형(immutable) 자료형과 변형(mutable) 자료형이 있다.

 

  • 정수, 실수, 문자열, 튜플은 불변형 자료형이다.
  • 리스트, 딕셔너리는 변형 자료형이다.

 

불변형 자료형은 데이터 값을 바꿀 때 메모리에 저장된 데이터 전체를 모두 없애고 새로 만든다.

 

변형 자료형은 할당된 메모리를 그냥 놔두고 메모리에 씌여있는 내용(값)만 바꾼다.

 

예를 들어 x라는 변수에 1이라는 정수를 입력하는 경우를 생각하자.

 

x = 1

 

위와 같은 코드를 실행하면 이름공간(name space)에 x라는 변수 이름이 생기고 메모리의 특정 위치에 1이라는 값이 씌여진다. 씌여진 메모리 위치(주소)를 알기 위해서는 id 명령을 사용한다.

id(x)

 

이 상태에서 변수 x의 값을 2로 바꾸면 메모리상의 해당 위치의 값이 2로 바뀌는 것이 아니라 메모리의 다른 위치에 2가 씌여지고 x는 새로운 위치를 가리키게 된다.

 

x = 2

id(x)

 

이번에는 리스트 즉, 변형 자료형의 경우를 살펴보자.

 

다음과 같이 실행하면 변수 x는 리스트 변형 자료형을 가리키고 리슽 변형 자료형의 첫번째 원소는 불변형 자료형인 정수 1을 가리킨다.

 

x = [1]

 

id(x)
3034340425472
id(x[0])

리스트 변수 x의 내용을 바꾸면 리스트 자체의 메모리가 파괴되지 않고 리스트가 가리키는 불변형 자료형만 바뀐다.

 

리스트 변수 x의 내용을 바꾸면 리스트 자체의 메모리가 파괴되지 않고 리스트가 가리키는 불변형 자료형만 바뀐다.

x[0] = 2
id(x)
3034340425472
id(x[0])
140709685770048

리스트와 사용법이 거의 같지만 불변형 자료형인 튜플의 경우에는 이렇게 원소가 가리키는 내용만 바꿀 수 없다.

 

x = (1,)
id(x)
3034340887328
id(x[0])
140709685770016
x[0] = 2
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-42-ebac946b3580> in <module>
----> 1 x[0] = 2

TypeError: 'tuple' object does not support item assignment

튜플의 내용을 바꾸러면 튜플 전체를 파괴하고 다시 만들어야 한다.

x = (2,)
id(x)
3034338007216
id(x[0])
140709685770048
728x90

'CS > Interview' 카테고리의 다른 글

[Python] 'is'와 '=='의 차이  (0) 2023.02.16
Python String concat 시간 복잡도  (0) 2023.02.16
REST API 란? 무엇인가  (0) 2023.02.13
API란 무엇인가??  (0) 2023.02.06
HTTP 메서드 와 메서드는 무슨 역할을 하는가??  (0) 2023.02.01