[python] “is None”과 “== None”의 차이점은 무엇입니까

나는 최근 에이 구문을 보았지만 차이점을 알지 못했습니다.

누군가가 그 차이를 말해 줄 수 있다면 고맙겠습니다.



답변

대답은 여기 에 설명되어 있습니다 .

인용 :

클래스는 원하는 방식으로 비교를 자유롭게 구현할 수 있으며 None과 비교할 수 있습니다. 그 자체로?).

실제로 말하면, 커스텀 비교 연산자가 드물기 때문에 큰 차이가 없습니다. 그러나 is None일반적인 규칙으로 사용해야합니다 .


답변

class Foo:
    def __eq__(self,other):
        return True
foo=Foo()

print(foo==None)
# True

print(foo is None)
# False


답변

이 경우에는 동일합니다. None은 단일 객체입니다 (단 하나만 존재합니다 None).

is 객체가 동일한 객체인지 확인하고 ==는 동일한 객체인지 확인합니다.

예를 들면 다음과 같습니다.

p = [1]
q = [1]
p is q # False because they are not the same actual object
p == q # True because they are equivalent

그러나 하나만 있기 때문에 None항상 동일하며 isTrue를 반환합니다.

p = None
q = None
p is q # True because they are both pointing to the same "None"


답변

numpy를 사용하면

if np.zeros(3)==None: pass

numpy가 요소별로 비교할 때 오류가 발생합니다.


답변

없음과 비교하는 내용에 따라 다릅니다. 일부 클래스에는와 == None다르게 취급되는 사용자 정의 비교 방법이 있습니다 is None.

특히 출력은 a == None 부울 일 필요는 없습니다 !! -버그의 빈번한 원인.

특정 예제의 경우 ==비교가 요소별로 구현 되는 numpy 배열을 사용하십시오 .

import numpy as np
a = np.zeros(3) # now a is array([0., 0., 0.])
a == None #compares elementwise, outputs array([False, False, False]), i.e. not boolean!!!
a is None #compares object to object, outputs False


답변