두 연산자와 ==의 차이점에 대해 이야기하기 전에 먼저 Python객체가 무엇인지 알아야 합니다. > 포함 세 가지 기본 요소는 id(신원 식별), python type()(데이터 유형) 및 value(값)입니다. is와 == 둘 다 객체를 비교하고 판단하는 데 사용되지만 객체를 비교하는 내용은 다릅니다. 구체적인 차이점을 살펴보겠습니다. Python에는 두 개체가 같은지 비교하는 두 가지 방법이 있습니다. 간단히 말해서 차이점은 다음과 같습니다.
is는 두참조여부를 비교합니다. 동일한 객체를 가리킵니다(참조 비교).
==은 두 객체가 같은지 비교하는 것입니다.>>> a = [1, 2, 3]
>>> b = a
>>> b is a # a的引用复制给b,他们在内存中其实是指向了用一个对象
True
>>> b == a # 当然,他们的值也是相等的
True
>>> b = a[:] # b通过a切片获得a的部分,这里的切片操作重新分配了对象,
>>> b is a # 所以指向的不是同一个对象了
False
>>> b == a # 但他们的值还是相等的
True
구현원리
==는 값 비교입니다. int, str과 같은 불변 객체는 값을 직접 비교합니다. Python에 알려진 객체의 경우 해당 eq
함수가 비교를 위해 호출됩니다. (실제로 알려진 객체도 내장된 eq 함수를 통해 비교해야 합니다.) 사용자 정의 객체의 경우 eq 함수를 구현하면 비교에 사용됩니다. 구현하지 않으면 ==와 효과가 동일합니다. 对象缓存机制
Python은 다음에 비교적 작은 개체를 사용할 때 캐시 영역에서 검색을 수행하지만 새 메모리를 열지는 않지만 계속해서 캐시합니다. 주소에 새 값이 할당됩니다. 예:
>>> c = 1 >>> d = 1 >>> print(c is d) True >>> 1000 is 10**3 False >>> 1000 == 10**3 True
는 계산을 통해 할당되며 버퍼 영역을 사용하지 않습니다. 이는 첫 번째 코드 예제에서 볼 수 있습니다.
string의 경우 intern 함수를 사용하여 버퍼를 강제로 사용할 수 있습니다.
위 내용은 Python에서 연산자 '=='와 'is'의 차이점 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!