본문 바로가기
Python/Python FAQ

Python 파이썬에서의 문자열 비교: is vs. == [중복], String comparison in Python: is vs. == [duplicate]

by 베타코드 2023. 9. 11.
반응형

질문


나는 작성하고 있던 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를 가진 두 개의 객체를 찾는 것에만 사용되어야 할 의도인지 궁금합니다.

네, 그것이 바로 그것의 목적입니다.

반응형

댓글