본문 바로가기
카테고리 없음

파이썬의 데이터 타입과 느린 이유

by 개발자doc 2024. 12. 16.
목차
1. 파이썬의 데이터 타입
2. 파이썬이 느리다고?
1. 파이썬의 데이터 타입

파이썬은 프로그래밍 언어로써 여러 타입의 데이터를 다룰 수 있다.

1) 문자열형

여러 문자를 나열한 문자열 데이터로 한글, 영어, 숫자,특수문자 등 여러 형식의 데이터를 표현할 수 있다.

파이썬에서 다른 언어와 다르게 문자열을 표현하는 방법은 4가지가 있다.

  • 큰 따옴표로 감싸기
"안녕하세요"
  • 작은따옴표로 감싸기
'안녕하세요'
  • 큰 따옴표 3개로 감싸기
"""안녕하세요"""
  • 작은 따옴표 3개로 감싸기
'''안녕하세요'''

 

 

문자열을 나타내는데 작은 따옴표와 큰따옴표를 사용하는데 왜 세개씩 사용하는 방법이 있을까?

그 이유는 문자열안에 따옴표를 표시해야할 때가 있다. 하지만 따옴표를 열고 문자열안에 따옴표가 있을 때 문자열이 끝나는 것으로 인식한다. 

str='It's me'
# SyntaxError: unterminated string literal 에러발생!

str2 = '''It's me'''
# It's me

따라서 파이썬에서는 따옴표를 세개를 사용하여 문자열 내부에서 따옴표를 표시할 수 있는 방법을 제공한다.

 

2) 숫자형

숫자형데이터는 우리가 흔히 사용하는 10진수 정수와 실수를 포함해 8진수와 16진수까지를 나타낼 수 있다.

# 10진수
number = 10

# 실수
number = 1.23

# 8진수
number = 0o77

# 16진수
number = 0xA

 

3) 리스트

정수와 문자열만으로도 프로그래밍을 할 수는 있지만 좀 더 효율적으로 작업을 할 수 있도록 리스트 타입의 데이터를 파이썬에서도 사용할 수 있다. 리스트로 사용할 변수에 []를 할당하고 괄호안에 리스트에 포함할 데이터를 추가해주고 쉼표로 구분해준다.

list = [1,2,3,4,5]

이렇게 리스트를 만들면 반복문을 통해 쉽게 데이터에 접근하여 작업을 할 수 있다. 

 

3) 튜플

파이썬에서는 리스트와 비슷한 데이터가 있는데 이것이 바로 튜플이다. 튜플은 리스트와 다르게 대괄호가 아닌 소괄호를 사용하여 연속된 데이터를 표시한다. 

tuple = (1,2,3)

그렇다면 리스트와 다른 점이 뭘까? 

리스트는 각 요소가 변화할 수 있지만 튜플은 데이터를 수정 또는 삭제가 불가하다. 만일 변경하려 한다면 에러가 발생한다.

tuple' object does not support item assignment

 

 

4) 딕셔너리

딕셔너리는 java에서 map, JS에서 object같이 키와 값으로 이루어진 데이터 타입이다. 키와 값을 함께 중괄호 안에 포함시키는 것으로 사용할 수 있다.

dic = {key:value}

# 데이터 접근시
dic[key]

딕셔너리에서 키는 고유한 값이므로 새로운 값을 추가할 때 key가 이미 존재한다면 기존의 값이 변경될 수 있기에 주의가 필요하다.

또한 딕셔너리는 대괄호 표기로 value에 접근하는데 이는 보다 직관적으로 표기하고 .표기로 접근하는 객체와 차이를 두기 위함이다.

 

딕셔너리는 객체와 비슷한 형태를 갖기 때문에 혼란스러울 수 있다. 따라서 차이점을 알아두는 것이 좋다.

딕셔너리 객체
내장 자료형 클래스의 인스턴스
key와 value로 이루어진 map형식의 데이터 클래스에 정의된 속성과 메서드를 갖음
[]표기법으로 접근 .표기법으로 접근

 

2. 파이썬이 느리다고?

파이썬이 흔히 속도가 느린 언어라고 한다. 데이터 타입을 언급하다가 갑자기 왜 파이썬이 느리다고 하는 것일까? 

그 이유는 서로 상관이 있기 때문이다.

 

파이썬의 모든 데이터 타입은 객체 타입으로 인식된다. 즉  데이터가 원시와 참조가 나누어져 있는 타 언어와는 다르게 int,float같은 원시형  데이터가 객체로 다루어진다. 변수를 선언하고 데이터를 할당하면 자료형에 대한 기본 클래스를 통해 인스턴스를 할당받아 사용한다.

 

파이썬은 메모리 효율성과 속도, 안정성에 장점이 있는 원시형 데이터가 아닌 참조형 데이터 방식을 채택한 이유가 뭘까?

 

1) 객체지향 프로그래밍

오래전부터 객체지향 프로그래밍이 인기를 끌었다. 보통 시간이 지나면서 새로운 기술이나 방법론이 나오면서 이전의 기술을 도태되는 경우가 많다. 하지만 객체지향 프로그래밍은 재사용성, 캡슐화, 상속 등 여러 장점으로 아직까지 사랑받고 있는 프로그래밍 방법 중 하나다.

파이썬 또한 이러한 객체지향 프로그래밍 방식을 채택하였다. 

 

2) 일관성

파이썬은 단순하고 일관성을 지향하는 프로그래밍 언어다. 원시형 데이터는 메서드의 파라미터로 객체 연산에 영향을 주는 역할로 사용될 수는 있지만 객체를 통해 접근할 수 있는 메서드를 사용할 수 없다. 따라서 원시 데이터가 있을 경우 실행 엔진은 객체과 구분하여 처리해야한다. 하지만 파이썬은 모든 데이터가 객체이므로 파이썬의 실행 엔진은 모든 데이터를 일관되게 처리할 수 있다.

 

3) 확장성

파이썬의 모든 데이터는 객체이기 때문에 필요한 추가 속성이나 메서드를 부여하는 것이 가능하다.

 

참고

 

https://docs.python.org/3/reference/datamodel.html#objects-values-and-types

 

3. Data model

Objects, values and types: Objects are Python’s abstraction for data. All data in a Python program is represented by objects or by relations between objects. (In a sense, and in conformance to Von ...

docs.python.org