python의 자료형
scala data
- bool, byte, int, float, complex
vector data
- list, set, dict: 가변 시퀀스 - 데이터 변경이 가능
- bytes, str, tuple: 불변 시퀀스 - 데이터 변경이 불가능
문자열
- 문자열은 + 와 비교 연산자가 오버로딩 되어 있음
- + 연산은 주의
- 문자열을 영문과 숫자를 제외하고는 인코딩과 디코딩을 이용해서 저장하고 읽음
- 한글의 경우는 euc-kr, ms949(cp949), utf-8, utf-8mb4 등이 있음
- 최근에는 utf-8이나 utf-8mb4만 이용
- 윈도우즈에서 한글을 사용하게 되면 기본 인코딩이 ms949인 경우가 있는데 인코딩이 다른 데이터를 읽어내면 글자가 깨지게 됨, 한글이 포함된 텍스트를 읽을 때는 인코딩을 확인하는 습관을 갖는데 좋음
list
- 데이터를 논리적으로 순서대로 배치하는 자료구조
- 파이썬의 list는 double linked list
- 데이터를 동적으로 추가하거나 삭제할 수 있음
- 맨 앞의 데이터나 맨 뒤의 데이터를 삭제하거나 추가하는 것은 쉽지만 중간에 데이터를 삽입하거나 삭제하면 느림
- list는 스레드에 안전하지 않음
- list 대안
- queue.Queue, LifoQueue(스택), PriorityQueue(우선 순위 큐): 스레드 간에 안전하게 통신을 하기 위해서 사용
- multiprocessing 모듈에서도 Queue와 유사한 클래스를 제공, 태스크 관리에 특화
- 비동기 환경에서 사용하기 위한 asyncio 모듈의 클래스를 이용하는 것이 좋음
- heapq 모듈에서도 제공
- collections 모듈의 deque 클래스
- queue는 FIFO 방식으로 동작
- deque는 앞과 뒤 양쪽에서 삽입과 삭제가 가능
- append와 pop에서 압도적으로 빠른 작업 시간을 가짐
- 양끝단의 데이터를 추가하거나 삭제하는 작업의 경우 list는 O(n) 정도의 시간 복잡도를 나타내지만 deque는 O(1)
tuple
- 리스트와 유사하고 접근 방법도 동일
- 내부 데이터의 변경이 안됨
- 생성할 때 ( ) 안에 데이터를 나열해도 되고 괄호를 생략하고 나열해도 됨
- 하나의 데이터를 가지고 tuple을 만들고자 할 때는 (데이터,) 형태로 만들어야 함
- unpacking 가능
- 나누어서 사용이 가능한데 나머지 전부를 배정하고자 할 때는 * 를 붙여줘야 함
- 리턴 데이터로 많이 사용
- 기본 튜플은 인덱스를 가지고 데이터를 접근
- collections.namedtuple은 dict처럼 이름과 값을 같이 저장
- 대다수 다른 언어의 튜플은 namedtuple임
이중 for