자료형
리스트(List)와 딕셔너리(Dictionary)에 대해 중점적으로 살펴본다.
파이썬 자료형
None
class None Type
숫자
정수형
정수 ( class int )
파이썬에서는 숫자 정수형으로 int만을 제공
int는 임의 정밀도를 지원(무제한 자릿수 제공)
⇒ 정수를 숫자의 배열로 간주해서, 자릿수 단위로 쪼개어 배열 형태로 표현한다.
이후, 나중에 사용할 때 모두 더하여 사용한다.
⇒ 숫자를 임의 정밀도로 처리하면 계산 속도가 저하되지만
숫자를 단일형(int 하나)로 처리할 수 있고
Overflow를 고려할 필요가 없어 잘못된 계산 오류를 방지할 수 있음.
⇒ 기능을 위해 속도를 희생
불리언 ( class bool )
bool은 엄밀히 따지면 논리 자료형이지만,
파이썬 내부적으로 1(True)와 0(False)로 처리되는 int의 서브클래스
int는 Object의 하위 클래스이기도 함
object > int > bool
논리 자료형 값인 True와 정수형 값인 1을 비교
>>> True == 1
True
>>> False == 0
True
실수
class float
집합형
집합 ( class set )
: set은 중복된 값을 갖지 않는 자료형
>>> a = {3,2,3,5}
>>> a
{2,3,5}
매핑
딕셔너리 ( class dict )
: key와 value로 구성된 복합 자료형
시퀀스
불변
- 문자열 ( class str )
“str 변수는 값을 변경할 수 있는 것 아닌가? ”
>>> a = 'abc'
>>> a = 'def'
>>> print(a)
'def'
>>> type(a)
<class 'str'>
a 변수는 다른 str 타입인 def를 참조했을 뿐, str값은 그대로 존재함
>>> a='abc'
>>> a='def'
>>> id('abc') == id('def')
False
실제로 str를 바꾸려면 오류가 난다
>>> a[1]='d' => 오류!
- 튜플 ( class tuple )
- 바이트 ( class bytes )
가변
원시 타입
메모리에 정확하게 타입 크기만큼의 공간을 할당하고
그 공간을 오로지 값으로 채워넣기에 적은 공간을 차지하고 빠른 속도를 제공한다.
하지만 원시 타입에 대응되는 객체를 만들어 사용하면
다양하고 편리한 기능을 사용할 수 있다.
그만큼 공간을 많이 차지하며 속도가 느려진다.
하지만, 파이썬은 속도보다는 편의성을 추구하기 때문에 객체 자료형만 지원한다.
언어 | 지원 타입 형태 |
---|---|
C | 원시 타입 |
자바 | 원시 타입, 객체 |
파이썬 | 객체 |
객체
파이썬은 모든 것이 객체, 심지어 문자와 숫자도 모두 객체
불변 객체와 가변 객체로 나눌 수 있음
파이썬에서 변수를 할당하는 작업은
해당 객체에 대해 참조를 한다는 의미
- 불변 객체
bool, int, float, tuple, str
⇒ 값이 변하지 않기에 dict의 key나 set의 값으로 사용할 수 있다.
- 가변 객체
list, set, dict
다른 변수가 참조하고 있을 대, 그 변수의 값 또한 변경된다는 얘기
>>> a=[1,2,3,4,5]
>>> b=a
>>> b
[1,2,3,4,5]
>>> a[2] = 4
>>> a
[1,2,4,4,5]
>>> b
[1,2,4,4,5]
속도
- 원시 타입
단순 정수형의 덧셈 연산을 하는 경우에도
메모리에서 값을 꺼내 한번 연산하면 끝
- 객체
값을 꺼내는 데만 해도 여러단계의 부가 작업이 필요 ⇒ 시간이 오래 걸림
하지만, 파이썬의 Numpy는 빠른 속도를 제공하는데
이는 C로 만든 모듈이며 내부적으로 리스트를 C의 원시 타입으로 처리한다고 한다.
import timeit
# 원하는 코드 함수화
def my_code():
for i in range(10 ** 6):
pass
# 시간 측정
%timeit my_code()
# 10 loops, best of 5: 23.5 ms per loop
%timeit -n 100 my_code() # 100번 돌린 평균 계산 시간
추가 내용
'파이썬 알고리즘' 카테고리의 다른 글
딕셔너리 (0) | 2023.04.18 |
---|---|
파이썬 리스트 구조 (0) | 2023.04.18 |
빅 오 표기법 (0) | 2023.04.18 |
파이썬 문법 기본 (0) | 2023.04.18 |