질문
나는 작성하고 있던 Python 스크립트가 이상하게 작동하는 것을 알았고, 무한 루프로 추적했습니다. 루프 조건은 while line is not ''
였습니다. 디버거에서 실행하다보니 line이 실제로는 ''
였습니다. is not ''
대신에 !=''
로 변경하니 정상적으로 작동했습니다.
또한, int나 Boolean 값을 비교할 때에도 기본적으로 '=='을 사용하는 것이 일반적으로 더 좋다고 생각되나요? 나는 항상 'is'를 사용하는 것이 더 미적으로도 만족스럽고 파이썬스럽다고 생각했는데 (그래서 이 함정에 빠져들게 되었습니다...), 아마도 동일한 id를 가진 두 개체를 찾고 싶을 때만 사용하도록 의도된 것인지 궁금합니다.
답변
모든 내장 Python 객체 (예: 문자열, 리스트, 사전, 함수 등)의 경우, x가 y와 같다면 x==y도 True입니다.
항상 그렇지는 않습니다. NaN은 반례입니다. 그러나 일반적으로 동일성 (is
)은 동등성 (==
)을 의미합니다. 그 역은 참이 아닙니다. 두 개의 다른 객체가 동일한 값을 가질 수 있습니다.
또한, int 또는 Boolean 값을 비교할 때 기본적으로 '=='을 사용하는 것이 더 좋다고 여겨집니까?
값을 비교할 때는 ==
를 사용하고, 식별자를 비교할 때는 is
를 사용합니다.
int (또는 일반적으로 변경할 수 없는 유형)를 비교할 때는 대부분 전자를 사용해야 합니다. 작은 정수를 is
로 비교할 수 있는 최적화가 있지만, 이를 의존해서는 안 됩니다.
Boolean 값에 대해서는 비교를 하지 않아야 합니다. 다음과 같이 대신 사용하세요:
if x:
# do something
None
과 비교할 때는 is None
이 == None
보다 선호됩니다.
나는 항상 'is'를 사용하는 것을 좋아했는데, 그것이 더 미학적으로 매력적이고 파이썬스럽다고 생각했기 때문에 (이 함정에 빠진 것 같아서...), 그러나 그것은 두 개의 동일한 id를 가진 두 개의 객체를 찾는 것에만 사용되어야 할 의도인지 궁금합니다.
네, 그것이 바로 그것의 목적입니다.
댓글