카테고리 없음
파이썬(Python) 집합(set) 타입, discard vs. remove 비교
드라이빙 인사이트
2019. 12. 14. 06:41
반응형
파이썬의 데이터 타입 중에 집합(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()는 존재하지 않음을 보장하려고 할때 사용하면 될 것 같다.
반응형