>  기사  >  백엔드 개발  >  Python에서 연산자 "=="와 "is"의 차이점 분석

Python에서 연산자 "=="와 "is"의 차이점 분석

高洛峰
高洛峰원래의
2017-03-16 16:21:531027검색

머리말

연산자와 ==의 차이점에 대해 이야기하기 전에 먼저 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
구현원리

는 둘이 동일한 객체인지 비교하므로 비교되는 것은 메모리 주소(id가 동일한지)이다.

==는 값 비교입니다. 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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