백준 16234번 인구 이동을 풀다가 다른 분들의 코드를 참고하였는데, 잘 몰랐던 연산자를 만나게 되어서 잊지 않기 위해 글을 쓰기로 했다.. 눈으로만 보면 다 까묵음..
|는 or 연산자이고 union을 뜻한다.
그래서 |= 는 |의 결과를 update한다는 뜻이다..
이 글에 아주 잘 정리가 되어있는데, |와 |=는 dictionary, counter, number에 사용할 수 있다고 한다.
s1 = {"a", "b", "c"} s2 = {"d", "e", "f"} print(s1 | s2) # {"a", "b", "c", "d", "e", "f"} print(s1) # {"a", "b", "c"} s1 |= s2 print(s1) # {"a", "b", "c", "d", "e", "f"}
이 글을 참고해서 파이썬 공식 문서에서 확인해보니 다음과 같았다.
Python 3.9에서 새로운 기능이 나왔는데, Dictionary Merge & Update Operators이다! 즉, 새로운 병합(merge) 연산자 (|) 와 병합 업데이트 연산자 (|=)가 나왔다.
기존의 dict.update 및 {**d1, **d2}와 같은 dictionary 병합 방법을 보완한다.
collections.Counter는 multiset 자료 구조와 관련이 있는데, 기본적으로 key-value 쌍의 dictionary의 형태를 가지고 있다.
from collections import Counter c1 = Counter({2: 2, 3: 3}) c2 = Counter({1: 1, 3: 5}) print(c1 | c2) # Counter({2: 2, 3:5, 1: 1}) print(c1) # Counter({2: 2, 3: 3}) c1 |= c2 print(c1) # Counter({2: 2, 3: 5, 1: 1})
dictionary와 다른 건 없다.
숫자에서는 |는 비트 단위 연산자이다.
n1 = 0 n2 = 1 print(n1 | n2) 1 print(n1) # 0 n1 |= n2 print(n1) # 1