📕

자료형

파이썬 자료형

파이썬의 자료형은 모두 객체!

불변 객체

한번 값을 담아두면 더 이상 값을 변경할 수 없음
>>> 10 >>> a = 10 >>> b = a >>> id(10), id(a), id(b) (4393858752, 4393858752, 4393858752)
Python
복사
예) int str tuple

가변 객체

값이 바뀔 수 있으며 다른 변수가 참조하고 있을 때 그 변수의 값 또한 변경됨
>>> 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]
Python
복사
예) list, dict

is 와 ==

is
id() 값을 비교
None은 널(null)로서 값 자체가 정의되어 있지 않으므로 ==로 비교가 불가능
==
값을 비교하는 연산자
deepcopy()로 복사한 결과 또한 값은 같지만 id는 다름
a = [1, 2, 3] a == a # True a == list(a) # True a is a # True a is list(a) # False a is copy.deepcopy(a) # False
Python
복사

속도

속도가 느린 이유

메모리의 값을 꺼내 연산하면 되는 원시 타입에 비해, 파이썬의 객체는 값을 꺼내는 데만 해도 var → PyObject_HEAD에서 타입코드를 찾는 등 여러 단계의 부가 작업이 필요
⇒ Numpy는 원시 타입으로 처리하기 때문에 빠름

자료구조

데이터에 효율적으로 접근하고 조작하기 위한 데이터의 조직, 관리, 저장구조
원시 자료형을 기반으로하는 배열, 연결 리스트, 객체 등 복합 자료형

자료형

컴파일러 또는 인터프리터에게 프로그래머가 데이터를 어떻게 사용하는지 알려주는 데이터 속성(Attribute)
자료구조에 비해 구체적
원시자료형까지 포함하는 모든 자료의 유형

추상 자료형(ADT)

자료형에 대한 수학적 모델
해당 유형의 자료에 대한 연산들을 명기한 것
행동만 정의할 뿐 실제 구현 방법은 명시하지 않음

리스트

순서대로 저장하는 시퀀스이자 변경 가능한 목록
입력 순서가 유지되며, 내부적으로는 동적 배열로 구현

각 언어별 동적 배열 구현

파이썬 - list()
C++ - std::vector
Java - ArrayList

파이썬 리스트

스택과 큐에서 사용가능한 모든 연산 제공

딕셔너리

키값 구조로 이루어진 딕셔너리
python 3.7에서는 입력순서 유지, 내부적으로는 해시 테이블로 구현

언어별 해시 테이블

Python - dict()
C++ - std::unordered_map
Java - HashMap

딕셔너리 모듈

defaultdict 객체
존재하지 않는 키를 조회할 경우 에러 메세지 대신 디폴트 값을 기준으로 해당 키에 대한 딕셔녀리 아이템 생성
counter 객체
아이템에 대한 개수를 계산해 딕셔너리로 리턴
a = [1, 2, 3, 3, 3] b = collections.Counter(a) >>> b Counter({3: 3, 1: 1, 2: 1}) >>> b.most_common() # 가장 빈도 수가 높은 요소 추출, 파라미터는 추출할 요소 개수 [(3, 3)]
Python
복사
OrderedDict 객체
파이썬 3.6 이하에서 사용
입력순서가 그대로 유지

문자열 조작

문자열을 변경하거나 분리하는 등의 여려 과정