본문 바로가기
Python

[Python] 집합(Set)의 discard()와 remove() 차이점

by A6K 2021. 5. 10.

파이썬에서 사용할 수 있는 자료구조 중에 집합(set) 타입이 있다. 집합 타입에서 특정 엘리먼트를 제거하는 메소드가 두 개 있다. 'discard()' 메소드와 'remove()' 메소드는 모두 집합에서 엘리먼트를 삭제하는 동작이다. 이 두 메소드의 동작 차이점을 이해하고 사용해야 예기치않은 버그를 피할 수 있다.

집합 remove()

집합에서 remove() 메소드를 이용해서 엘리먼트를 제거하는 소스코드를 작성해보자. 예를들어,

s = set()

s.add(10)
s.remove(10)
s.remove(10)

10이라는 숫자를 집합에 추가했다가 remove() 메소드를 이용해서 두 번 제거했다. 이 코드를 실행해보면,

Traceback (most recent call last):
  File "test.py", line 5, in <module>
    s.remove(10)
KeyError: 10

에러가 발생한다. 에러가 발생한 라인은 두 번째 remove() 메소드 호출 부분이다. 집합에서 10 이라는 값을 제거하라고 했지만 집합은 이미 비어있는 집합이기 때문에 10이라는 값이 없다. 그래서 KeyError가 발생한 것이다.

이 코드에서 remove() 메소드를 discard() 메소드로 변경해보자.

s = set()

s.add(10)
s.discard(10)
s.discard(10)

이 코드를 실행해보면

Process finished with exit code 0

정상적으로 진행된다.

remove() 메소드는 없는 키를 지우라고하면 없다고 KeyError를 발생시킨다. 반면 discard() 메소드는 지우라는 키가 집합에 없어도 에러가 발생하지 않는다. remove()는 실제 존재하는 엘리먼트를 지우는 동작에 사용하며, discar()는 집합에 존재하지 않음을 보장하려고 할 때 사용하면 된다. (집합 연산에 유용하다)


 

파이썬 스크립트 작성에 도움되는 글 모음

파이썬으로 프로그램을 작성할 때 도움되는 글들을 모아본다. Python 문법 Python 모듈

hbase.tistory.com

 

댓글