게시:

원시타입(Primitive type)

원시타입 자료형이란 정수, 실수, 문자 등의 기본적인 자료형을 말한다. 참고로 파이썬에서는 모든 것이 객체(Object)이므로 원시 자료형을 지원하지 않으나 C언어나 JAVA는 원시 자료형을 지원한다.

원시 자료형은 컴퓨터 메모리에 Data type의 크기만큼 정확하게 필요한 공간을 할당하고 그 공간은 오로지 값으로만 채울 수 있어 매우 빠른 연산이 가능하다.

예를 들어 정수형 덧셈 연산의 경우 메모리에서 값을 꺼내 한 번 연산하면 끝이다. 반면 파이썬은 객체에서 값을 꺼내 타입코드를 찾아 대응되는 자료형을 찾는 등 간단한 연산에도 여러 작업이 필요하다.

자료형 특징 비교

구분
원시타입(Primitive type)
객체타입(Object type)
장점 - 메모리에 정확하게 필요한 크기만 할당
- 매우 빠른 연산 가능
- 단순히 메모리에 숫자로 보관할 때는 못하는
작업 수행 가능
(예: 문자・16진수 변환, 시프팅 등 비트조작)
단점 - 연산의 종류가 단순 - 메모리 점유율 증가
- 계산속도 감소

원시 자료형의 크기

자료형 명칭 크기 자료형 명칭 크기
bool 불, 불리언 1 바이트 float 실수 4 바이트
char 문자 4 바이트 long 더 큰 정수 8 바이트
int 정수 4 바이트 double 더 큰 실수 8 바이트
this is a placeholder image
이해를 돕기 위하여 설명하면 사진에서 네모 1칸이 1바이트라면 정수는 4칸(4 바이트)을 차지한다.
하지만 이는 이해를 돕기 위한 설명으로 실제 사진과 같이 칸으로 나뉘어 저장되는 것은 아니다.

파이썬의 자료형(객체, Object type)

파이썬의 모든 자료는 객체(Object)로 원시타입을 지원하지 않는다. 따라서 Low level 언어만큼 연산이 빠르진 않지만 객체로써 다양한 기능과 편의성을 제공한다. 성능과 편리함을 Trade-off한 것이다.

다음은 파이썬의 주요 자료형이다.

Data type of python
파이썬의 주요 자료형

불변형 객체

불변 객체는 메모리에 한 번 값이 할당되면 값이 바뀌지 않는 객체를 말한다. 어떤 변수에 불변 객체를 할당하고 그 변수에 다른 값을 다시 할당하는 경우 변수는 다른 값을 나타내므로 마치 값 자체가 바뀐 것으로 보인다. 하지만 사실 다른 메모리 주소를 가리키는 것이다. 실제 값은 바뀌지 않는다.

불(bool), 문자열(str), 정수(int), 실수(float), 튜플(tuple)이 이에 해당한다.

참고: 이와 같은 사실은 인터프리터에서 몇 개의 변수선언과 id() 함수를 사용해보면 쉽게 확인할 수 있다. 추후에 다른 포스팅에서 따로 설명하겠지만 딕셔너리의 키 값은 불변 객체를 사용해야 한다.

더 알아보기: 변수와 객체 사이의 연관관계를 바꾼 뒤에도 값을 가진 객체는 여전히 존재하며 다만 그 객체에 대한 연결이 끊겼을 뿐이다. 이 때 메모리의 낭비(메모리 누수)가 발생하지만 파이썬 인터프리터는 어떤 불변 객체와 변수의 연관관계가 사라지면 그 객체를 삭제하고 메모리를 회수(Garbage Collection)한다.

가변 객체

만들어진 이후에도 실제 값을 변경할 수 있는 객체를 말한다. 변경이라 함은 값의 추가, 수정, 삭제를 말한다. 가변 객체는 데이터를 직접 변경할 수 있다. 따라서 값이 변결될 때마다 불필요하게 원본 객체를 다시 새로 만들거나 복사할 필요가 없다. 또한 원소(Element)들의 위치를 메모리 상에서 직접 바꿀 수 있다. 리스트(list), 딕셔너리(dict)가 이에 해당한다.

댓글남기기