Python 에서 is 와==판단 의 차이
먼저 예 를 들다
황 군 은 최근 에 주머니 사정 이 매우 넉넉 해서 많은 돈 을 들 여 P90D 테슬라 한 대 를 구 매 했다.우 리 는 잠시 이 차 의 이름 을'작은 P'라 고 지 었 다.이 차 는 옆 왕 씨 네 차(차 이름 은'왕 군')와 똑 같 고 모델 이 든 외모 든 가격 이 든 모두 똑 같 으 며 같은 차례 에 생산 된 것 이다.여기 서 우 리 는'작은 P'와'왕 군'이 똑 같 고 똑 같은(euqal)두 대 라 고 말 할 수 있 지만 본질 적 으로 이것 은 두 개의 서로 다른 대상 이다.어느 날 샤 오 쥔 은 그의 애 차 에'애 마'라 는 닉네임 을 붙 였 다.우리 가'작은 P'라 고 말 할 때 사실은'애 마'를 토론 하 는 것 이다.본질 적 으로 두 이름 은 같은 대상 을 가리 키 기 때문이다.여기 서 우 리 는'작은 P'와'애 마'를 똑 같은(identical)라 고 부른다.
Python 에서'='과'is'의 차 이 는 비교 할 수 있 습 니 다.전 자 는 같은 비교 이 고 두 대상 의 값 이 같은 지,후 자 는 일치 성 비교 이 며 두 대상 의 메모리 공간 주소 가 같은 지 비교 합 니 다.
분명히 메모리 주소 가 같 으 면 그들의 값 도 똑 같 을 것 이다.따라서'is'가 True 로 돌아 가면'=='도 반드시 True 로 돌아 가 고 반대로 성립 되 지 않 는 다.
talk is cheap, show me the code
목록 대상 을 만 든 다음 이름 a 를 지정 하고 다른 변수 b 를 정의 하여 같은 대상 을 가리 키 도록 합 니 다.
>>> a = [1, 2, 3]
>>> b = a
a 와 b 가 인쇄 한 값 은 모두 같 습 니 다.이 두 변 수 는 같은 대상 을 가리 키 기 때문에 마치 한 대의 차 에 두 개의 다른 이름 을 짓 는 것 과 같 습 니 다.
>>> a
[1, 2, 3]
>>> b
[1, 2, 3]
당연히 is 와=모두 True 로 돌아간다.
>>> a == b
True
>>> a is b
True
새로운 대상 을 만 듭 니 다.비록 값 이 같 지만 그들 은 본질 적 으로 두 개의 서로 다른 대상 이 고 두 개의 서로 다른 메모리 공간 에 있 기 때문에'is'는 False 로 돌아 갑 니 다.
>>> c = [1,2,3]
>>> a is c
False
그리고 비교 하 는 두 변수 가 같은 대상 을 가리 킬 때'is'는 True 로 돌아 가 고'=='은 최종 적 으로 대상 의 에 달 려 있다.eq__() 방법,본질 적 으로 두 변 수 를'=='으로 비교 조작 하여 대상 의 를 호출 합 니 다.eq__() 방법예 를 들 면:
>>> class Foo(object):
def __eq__(self, other):
return True
>>> f = Foo()
>>> f == 1
True
>>> f == None
True
>>> f is None
False
사용자 정의 클래스 foo 의 eq 방법 은 항상 True 로 돌아 가기 때문에 모든 대상 과'=='을 진행 하 는 것 은 True 로 돌아 갑 니 다.None 와 는 다른 대상 이기 때문에'is'작업 은 False 로 되 돌아 갑 니 다.마지막 으로 이 코드 가 왜 같은 조작 에 다른 결과 가 있 는 지 생각해 보 세 요.
>>> a = 257
>>> b = 257
>>> a is b
False
>>> a = 123
>>> b = 123
>>> a is b
True
요약:두 값 이 같은 지 비교 하려 면==,같은 대상 인지 비교 하려 면 is 를 사용 하 세 요.
사실 python 의 is 비교 대상 은 C 언어의 지침 과 같 습 니 다.주소 가 같은 지침 만 이 같은 지침 입 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Python의 None과 NULL의 차이점 상세 정보그래서 대상 = 속성 + 방법 (사실 방법도 하나의 속성, 데이터 속성과 구별되는 호출 가능한 속성 같은 속성과 방법을 가진 대상을 클래스, 즉 Classl로 분류할 수 있다.클래스는 하나의 청사진과 같아서 하나의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.