파이썬 3.9 릴리스와 주요 변경 사항

이 글에서는 파이썬 3.9에 추가된 기능과 바뀐 점을 알아보려 합니다. What’s New In Python 3.9 — Python 3.9.0 문서를 참고하였습니다.

주의! 개인적으로 판단하기에 사소한 사항들은 번역하지 않았고, 릴리스 노트만으로 이해하기가 어려운 기능엔 설명을 조금 보태었습니다.

딕셔너리 병합(merge), 갱신(update) 연산자

병합 연산자는 |, 갱신 연산자는 |=입니다. 다음 예시를 보시죠.

병합 연산자 |

파이썬 3.7부터 딕셔너리 순서가 보존된다는 점을 유의하세요.

>>> google = {'android': 11}
>>> apple = {'ios': 14}
>>> google | apple
{'android': 11, 'ios': 14}
>>> apple | google
{'ios': 14, 'android': 11}

갱신 연산자 |=

리스트를 딕셔너리로 바꿀 때, 리스트 내에 중복 데이터가 존재하는 경우에도 갱신 연산자로 손쉽게 처리할 수 있습니다.

>>> data = [('stock', 1), ('stock', 2)]
>>> aligned = {}
>>> for k, v in data:
...   aligned |= {k: v}
...
>>> aligned
{'stock': 2}

문자열의 접두사, 접미사를 삭제하는 removeprefix(), removesuffix() 메서드 추가

문자열의 접두사나 접미사를 삭제하는 메서드가 추가되었습니다.

접두사 삭제 removeprefix() 메서드

>>> title = 'blahsong'
>>> title.removeprefix('blah')
'song'
>>> title
'blahsong'
>>> title.removeprefix('song')
'blahsong'

접미사 삭제 removesuffix() 메서드

>>> title = 'blahsong'
>>> title.removesuffix('song')
'blah'
>>> title
'blahsong'
>>> title.removesuffix('blah')
'blahsong'

IANA 시간대를 지원하는 zoneinfo 모듈 추가

IANA는 인터넷 할당 번호 관리기관(Internet Assigned Numbers Authority)으로 IP 주소 등 인터넷 상의 공용 자원을 관리합니다. (ICANN이 생기면서 IP 관리는 이관하였습니다.) IANA에서는 타임존 등의 표준화 작업에도 관여하고 있는데요. 이 IANA 타임존을 지원하고자 zoneinfo 모듈이 표준 라이브러리에 추가되었습니다. 사용법은 다음과 같습니다.

>>> from zoneinfo import ZoneInfo
>>> from datetime import datetime
>>> dt = datetime(2020, 10, 5, 12, tzinfo=ZoneInfo("Asia/Seoul"))
>>> print(dt)
2020-10-05 12:00:00+09:00
>>> dt.tzname()
'KST'

구문 분석기가 LL 기반에서 PEG 기반으로 변경

PEP 617에 따르면 두 분석기의 성능은 비슷하지만 PEG 기반 구문 분석기가 더 유연하다고 합니다. 파이썬 3.10에서는 LL 기반 파서와 관련된 코드가 삭제될 예정이고, 이후로는 재미있고 유용한 PEG 기반 문법들이 추가될 예정입니다.

자잘한 변경 사항들

성능 향상

(나노초) 3.4 3.5 3.6 3.7 3.8 3.9
변수나 속성 읽기 성능
read_local 7.1 7.1 5.4 5.1 3.9 4.0
read_nonlocal 7.1 8.1 5.8 5.4 4.4 4.8
read_global 15.5 19.0 14.3 13.6 7.6 7.7
read_builtin 21.1 21.6 18.5 19.0 7.5 7.7
read_classvar_from_ class 25.6 26.5 20.7 19.5 18.4 18.6
read_classvar_from_instance 22.8 23.5 18.8 17.1 16.4 20.1
read_instancevar 32.4 33.1 28.0 26.3 25.4 27.7
read_instancevar_slots 27.8 31.3 20.8 20.8 20.2 24.5
read_namedtuple 73.8 57.5 45.0 46.8 18.4 23.2
read_boundmethod 37.6 37.9 29.6 26.9 27.7 45.9
변수나 속성 쓰기 성능
write_local 8.7 9.3 5.5 5.3 4.3 4.2
write_nonlocal 10.5 11.1 5.6 5.5 4.7 4.9
write_global 19.7 21.2 18.0 18.0 15.8 17.2
write_classvar 92.9 96.0 104.6 102.1 39.2 43.2
write_instancevar 44.6 45.8 40.0 38.9 35.5 40.7
write_instancevar_slots 35.6 36.1 27.3 26.6 25.7 27.7
데이터 구조 읽기 성능
read_list 24.2 24.5 20.8 20.8 19.0 21.1
read_deque 24.7 25.5 20.2 20.6 19.8 21.6
read_dict 24.3 25.7 22.3 23.0 21.0 22.5
read_strdict 22.6 24.3 19.5 21.2 18.9 21.6
데이터 구조 쓰기 성능
write_list 27.1 28.5 22.5 21.6 20.0 21.6
write_deque 28.7 30.1 22.7 21.8 23.5 23.2
write_dict 31.4 33.3 29.3 29.2 24.7 27.8
write_strdict 28.4 29.9 27.5 25.2 23.1 29.8
스택, 큐 오퍼레이션
list_append_pop 93.4 112.7 75.4 74.2 50.8 53.9
deque_append_pop 43.5 57.0 49.4 49.2 42.5 45.5
deque_append_popleft 43.7 57.3 49.7 49.7 42.8 45.5
타이밍 루프
loop_overhead 0.5 0.6 0.4 0.3 0.3 0.3

이 외에 다른 변경 사항은 What’s New In Python 3.9 — Python 3.9.0 문서를 참고하시면 됩니다.

의존성 관리 도구 캐스크(Cask)를 사용한 이맥스(Emacs) 환경설정

🗒 기사, 2014-06-01 - 이맥스(Emacs)를 확장하는 방대한 패키지들이 있습니다. 이러한 패키지들을 설치하다보면 관리가 점점 더 어려워집니다. 캐스크(Cask)는 이맥스 개발환경의 의존성을 관리해주는 도구입니다. 이 글에서는 캐스크를 사용해서 이맥스 사용자 환경설정을 관리하는 방법을 소개합니다.

아마존 EC2(Amazon EC2) 인스턴스 타입 검색 기능 추가

🗞 새소식, 2020-01-10 - 지난 10월 22일 아마존 EC2에는 인스턴스 타입을 검색하고 비교할 수 있는 검색 메뉴가 추가되었습니다. 아마존 EC2는 다양한 인스턴스 타입을 제공해서 선택하는 것도 쉽지 않았습니다. 인스턴스 검색 기능을 사용해 현재 상황에서 적절한 인스턴스 타입을 선택하는데 도움이 될 것으로 보입니다. 이 기능은 웹 콘솔과 API로 제공됩니다.

쿠버네티스에서 아마존 EFS 사용하기: efs-provisioner

🗒 기사, 2020-10-01 - 아마존 EFS(Amazon EFS)는 AWS에서 제공하는 매니지드 NFS 서버로 여러 서버에서 동시에 같은 파일을 공유할 때 편리하게 사용할 수 있습니다. 이 글에서는 쿠버네티스(Kubernetes)에서 EFS를 사용할 수 있도록 해주는 efs-provisioner의 사용법을 소개합니다.