딕셔너리 get 메서드와 in 연산자의 속도와 차이점

Python의 딕셔너리 자료구조(해시맵)에서 특정 키 값이 존재하는지 여부를 판단하기 위한 방법으로 아래와 같이 두 가지 방법을 제공합니다.

  • get(key) 메서드로 반환 값이 None인지 체크

  • key in dict 와 같이 in 연사자로 값이 존재하는지 체크

특정 키 값이 존재하는지 여부에 대해서는 두 방법 모두 시간복잡도 O(1)로 동일합니다. 그러나 아래와 같은 차이점이 존재합니다.

차이점

get(key) 메서드는 해당 key 값과 관련된 값을 반환합니다. 만약 키 값이 없는 경우, 기본 값을 지정하지 않는 이상 None이 리턴됩니다. get 메서드는 관련 값을 반환하기 때문에, 단순히 키 값이 존재하는지 여부를 판단하기 위해서는 in 연산자에 비해서 약간의 오버헤드가 발생합니다.

반면 in 연산자는 반환 값이 없고, 존재여부만 판단하기 때문에 get 메서드보다 빠르다고 할 수 있습니다.

무조건 in 을 써야 하는가?

키 값의 존재 여부를 판단하기 위해서 무조건 in 연산자를 써야한다는 것은 아닙니다. 단지 get 메서드를 사용하던 in 연산자를 사용하던, 그 차이는 미미할 수 있기 때문에 상황에 따라서 적절한 방법을 이용하는 것이 좋다고 할 수 있습니다.

만약 키 값 존재 여부를 판단하고, 그 값을 사용해서 어떤 연산을 처리해야 한다면, get 메서드가 가독성 측면에서 더 좋을 수 있습니다.

if key in dict:
    # key exists

if dict.get(key) is not None:
    # key exists

어쨌든 핵심은 둘다 해시 테이블 구조를 사용하여 특정 키 값의 존재여부를 확인하는 시간 복잡도는 O(1) 이라는 것입니다.

Last updated