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 |