지난 글 Chatper2-1 정리
https://myjorney.tistory.com/140
지난 글에 이어 이번 글에서는 Chapter2의 나머지 부분을 정리해보겠습니다.
아직 Chatper2의 앞 부분을 읽으시지 않았다면 이전 정리 글을 읽으시면 좀 더 편하게 읽으실 수 있을 것 같습니다.
내용 별 정리
list.sort()와 sorted()내장 함수
- list.sort()는 리스트 내부를 변경해서 정렬.
- sorted(list) 새로운 리스트를 생성해서 반환.
list.sort()메서드와 sorted()메서드의 차이를 설명하는 부분에서 파이썬의 함수를 작성할 때 중요한 관례 중 하나인 함수가 새로운 객체를 생성하지 않음을 알려주기 위해서 None을 반환하는 것을 설명해주는데 가끔 깜빡할 수 있는 부분인 것 같다.
정렬된 시퀀스를 bisect로 관리하기
많은 사람들이 아는 것 처럶 bisect 모듈은 정렬된 시퀀스에서 빠르게 element를 search 할 수 있다. 이 사실을 아는 사람은 많지만 실제로 코드에 잘 활용하는 것은 본 적이 많지 않다. 대부분 데이터의 양이 많지 않거나 라이브러리를 사용하면 반환하는 객체의 형이 정해져 있기 때문인 것 같은데 기억해두면 분명히 적절하게 사용할 기회가 있을 것 같다.
FIFO(Queue)나 LIFO(Stack)의 자료구조가 필요할 땐 deque(double ended queue)
양방향 큐인 deque을 사용하면 queue 자료구조나 stack자료구조의 데이터를 효율적으로 다룰 수 있다.
리스트 안에 숫자만 있는 경우 -> array.array
같은 type의 데이터를 다루르는 경우 array.array로 효율적이고 빠르게 처리할 수 있다.
메모리 뷰(memoryview)
memoryview 내장 클래스는 공유 메모리 시퀀스형으로서 bytes를 복사하지 않고 배열의 슬라이스를 다룰 수 있게 해준다.
메모리 뷰는 PIL이미지, SQLite 데이터베이스, NumPy 배열 구조체를 복사하지 않고 메모리를 공유할 수 있게 해준다. 데이터셋이 커지는 경우 이것은 아주 중요한 기법이다.
아래 memoryview 코드 예제에서 구조체를 복사하지 않고 메모리를 공유해서 배열의 값을 변경한 것을 볼 수 있다.
import array
numbers = array.array('h', [-2,-1,0,1,2])
memv = memoryview(numbers)
len(memv)
5
memv[0]
-2
id(memv[0]), id(numbers[0])
(4546443376, 4546443376)
memv_oct = memv.cast('B')
memv_oct.tolist()
[254, 255, 255, 255, 0, 0, 1, 0, 2, 0]
memv_oct[5] = 4
numbers
array('h', [-2, -1, 1024, 1, 2])
파이썬의 표준 라이브러리에서 제공하는 시퀀스형만 해도 정말 종류가 많다. 각각의 시퀀스형들은 용도에 맞게 적절하게 사용하는 것만으로도 효율적이면서 파이썬스러운 코드를 작성할 수 있다. 한 번에 익숙해질 수는 없겠지만 계속 의식적으로 사용하고 공부하면 만든 사람들의 의도에 맞게 효율적으로 사용할 수 있을 것이다.
Chatpter2에서 정리했던 내용들을 간단히 살펴보면 아래와 같다.
- sequence의 구분 (container sequence vs flat sequence, mutable vs immutable)
- list comprehension으로 명확한 list 생성, generator를 이용해서 메모리를 효율적으로 사용하면서 iteration
- tuple (record, immutable)
- bisect 정렬된 시퀀스
- array.array 같은 데이터 type인 경우
- memoryview 메모리를 공유해서 사용하는
- deque 양방향 큐
Chatper2 정리는 이번 포스팅으로 마침니다.
그럼 Chatper3 정리에서 봽겠습니다!
'Computer Engineering > Fluent Python 정리' 카테고리의 다른 글
Fluent Python Chapter 5. 일급 함수 (0) | 2022.01.14 |
---|---|
Fluent Python Chapter 4. 텍스트와 바이트 (feat. 깨지지마라..) (2) | 2022.01.09 |
Fluent Python Chapter 3. Dictionary (feat. hashtable) (0) | 2022.01.04 |
Fluent Python Chapter 2-1. Sequence (Sequence의 분류, listcomp, generator, tuple, slicing) (0) | 2021.12.23 |
Fluent Python Chapter 1. 파이썬 데이터 모델 (Feat. 일관성 있는 언어) (0) | 2021.12.18 |