티스토리 뷰

파이썬의 데이터 타입 중에 집합(set) 타입이 있다. 집합 타입의 메소드 중에 특정 엘리먼트를 삭제하는 메소드가 두 개 있는데, 'discard()'와 'remove()'가 그것들이다. 이 두 메소드 모두 엘리먼트를 삭제하는 동작이 있는데 정확하게 어떤 차이점이 있는 것일까?

 

우선 remove() 메소드를 테스트해보자. 다음 코드를 보자.

s = set()

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

remove() 메소드를 이용해서 '10'이라는 엘리먼트를 두번 제거했다. 첫번째 remove()는 예상대로 정상동작했지만 두 번째 remove()를 수행할 때 다음과 같은 에러가 발생한다.

Traceback (most recent call last):
  File "test.py", line 5, in <module>
    s.remove(10)
KeyError: 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()는 실제 존재하는 대상을 지우는 동작에, discard()는 존재하지 않음을 보장하려고 할때 사용하면 될 것 같다.

댓글
댓글쓰기 폼
공지사항
Total
33,420
Today
75
Yesterday
258
링크
«   2020/10   »
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함