development

파이썬에서 문자열 비교 : is vs. == [duplicate]

big-blog 2020. 2. 11. 22:34
반응형

파이썬에서 문자열 비교 : is vs. == [duplicate]


필자가 작성한 Python 스크립트가 다람쥐처럼 행동하고 루프 조건이 인 무한 루프까지 추적했습니다 while line is not ''. 디버거에서 그것을 통해 실행하면 실제로 그 줄이 판명되었습니다 ''. 내가 !=''아닌로 변경했을 때 is not ''정상적으로 작동했습니다.

또한 int 또는 Boolean 값을 비교할 때도 기본적으로 '=='을 사용하는 것이 일반적으로 더 나은 것으로 간주됩니까? 나는 항상 'is'를 사용하는 것을 좋아했습니다. 왜냐하면 나는 그것이 더 미학적으로 유쾌하고 pythonic (이 함정에 빠진 방법입니다 ...)을 발견했기 때문입니다.하지만 두 가지를 찾는 것에 관심이있을 때 예약 될 것인지 궁금합니다. 같은 ID를 가진 객체.


모든 내장 Python 객체 (예 : 문자열, 목록, dicts, 함수 등)의 경우 x가 y이면 x == y도 True입니다.

항상 그런 것은 아닙니다. NaN은 이에 대한 반례입니다. 그러나 일반적 으로 동일성 ( is)은 평등 ( ==)을 의미 합니다. 반대의 경우는 사실이 아닙니다. 두 개의 서로 다른 객체가 동일한 값을 가질 수 있습니다.

또한 int 또는 Boolean 값을 비교할 때도 기본적으로 '=='을 사용하는 것이 일반적으로 더 나은 것으로 간주됩니까?

==값을 is비교할 때 ID를 비교할 사용 합니다.

int (또는 일반적으로 불변 유형)를 비교할 때 항상 전자를 원할 것입니다. 작은 정수를와 비교할 수있는 최적화가 is있지만 의존하지는 않습니다.

부울 값의 경우 비교를 수행하지 않아야합니다. 대신에:

if x == True:
    # do something

쓰다:

if x:
    # do something

에 대한 비교를 들어 None, is None이상이 바람직하다 == None.

나는 항상 'is'를 사용하는 것을 좋아했습니다. 왜냐하면 나는 그것이 더 미학적으로 유쾌하고 pythonic (이 함정에 빠진 방법입니다 ...)을 발견했기 때문입니다.하지만 두 가지를 찾는 것에 관심이있을 때 예약 될 것인지 궁금합니다. 같은 ID를 가진 객체.

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


나는 방법에 약간의 예를 보여 드리고자 is==불변의 유형에 포함됩니다. 그것을보십시오 :

a = 19998989890
b = 19998989889 +1
>>> a is b
False
>>> a == b
True

is메모리의 두 객체를 ==비교하고 값을 비교합니다. 예를 들어 작은 정수가 파이썬에 의해 캐시되어 있음을 알 수 있습니다.

c = 1
b = 1
>>> b is c
True

==값을 is비교할 때 ID를 비교할 사용해야합니다 . 또한 영어의 관점에서 "같음"은 "is"와 다릅니다.


논리에 결함이 없습니다. 진술

x가 y이면 x == y도 참입니다.

의미로 읽혀서 안됩니다

x == y이면 x는 y입니다.

논리 문의 반대가 참이라고 가정하는 것은 독자 측의 논리 오류입니다. http://en.wikipedia.org/wiki/Converse_(logic) 참조


참조 이 질문을

독서의 논리

모든 내장 Python 객체 (예 : 문자열, 목록, dicts, 함수 등)의 경우 x가 y이면 x == y도 True입니다.

약간 결함이 있습니다.

경우는 is다음 적용 ==사실이 될 것이다, 그러나 역으로 적용되지 않습니다. False ==is산출 하는 동안 True를 산출 할 수 있습니다 .

참고 URL : https://stackoverflow.com/questions/2988017/string-comparison-in-python-is-vs



반응형