>백엔드 개발 >파이썬 튜토리얼 >Python에서 is와 ==의 차이점에 대한 분석 예

Python에서 is와 ==의 차이점에 대한 분석 예

Y2J
Y2J원래의
2017-04-21 16:06:451162검색

파이썬에서는 is가 두 객체가 같은지 확인하고, ==는 같은지 확인하는데요, 아주 간단하게 구체적인 예를 통해 분석해 보겠습니다.

파이썬에서는 같은지 비교합니다. 두 객체(변수)가 동일한 경우 "is" 및 "==" 연산을 사용할 수 있지만 둘 사이의 차이점은 무엇입니까? 언제 "is"를 사용하고 언제 "=="를 사용합니까? 인터뷰를 하면서 많은 지원자들이 두 가지를 명확하게 설명하는 데 어려움을 겪는다는 것을 알았습니다. 따라서 이번 기사에서는 "The Zen of Python"이 두 가지에 대해 심도 있고 이해하기 쉽게 비교 소개할 것입니다.

먼저 예를 들어보겠습니다

Xiao Huang은 최근 엄청난 돈을 들여 P90D Tesla를 구입했습니다. 이 차의 이름을 임시로 "Little P"라고 하겠습니다. 옆집 Lao Wang이 소유한 자동차와 완전히 동일합니다(자동차 이름은 "Xiao Wang"입니다). 모델, 외관, 가격이 동일하며 동일한 배치로 생산됩니다. 여기서 우리는 "Little P"와 "Little Wang"이 두 개의 동일하고 동일한 차량(euqal)이지만 본질적으로 두 개의 다른 개체라고 말할 수 있습니다. 어느 날 Xiaojun은 자신의 차에 "Aiju"라는 또 다른 이름을 부여했습니다. 우리가 "Xiao P"라고 말하면 실제로는 "Aiju"에 대해 논의하고 있는 것입니다. 본질적으로 두 이름은 동일한 차량을 지칭하기 때문입니다. 여기서는 "Little P"라고 부릅니다. "와 "아이주"는 완전히 동일합니다.

Python에서는 "=="와 "is"의 차이를 이 예시로 비교할 수 있습니다. 전자는 두 객체의 값이 같은지 비교하는 동등 비교이고, 후자는 같습니다. 일관성 비교입니다. 비교되는 것은 두 개체의 메모리 공간 주소가 동일한지 여부입니다.

분명히 메모리 주소가 동일하면 해당 값도 동일해야 합니다. 따라서 "is"가 True를 반환하면 "=="도 True를 반환해야 하지만 그 반대는 아닙니다. .

말이 싸다, 코드를 보여줘

먼저 목록 개체를 만든 다음 이름 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를 반환합니다. It과 None은 서로 다른 두 개체이므로 'is' 연산은 False를 반환합니다.

마지막으로 이 코드에 대해 생각해보고 동일한 작업이 왜 다른 결과를 가져오는지 생각해 보세요

>>> a = 257
>>> b = 257
>>> a is b
False
>>> a = 123
>>> b = 123
>>> a is b
True

요약:

두 가지를 비교하고 싶다면 값이 동일하면 ==를 사용합니다.

실제로 Python에서 is로 비교하는 객체는 C 언어의 포인터와 매우 유사합니다. 동일한 주소는 동일합니다.

위 내용은 Python에서 is와 ==의 차이점에 대한 분석 예의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.