>  기사  >  백엔드 개발  >  파이썬에서 is와 == 부호의 차이점

파이썬에서 is와 == 부호의 차이점

爱喝马黛茶的安东尼
爱喝马黛茶的安东尼원래의
2019-06-24 11:48:042733검색

파이썬에서는 모든 것이 객체입니다. Python의 객체에 포함된 세 가지 기본 요소는 id(ID), type(데이터 유형) 및 value(값)입니다. == 또는 is를 사용하여 객체가 동일한지 비교할 수 있습니다. is와 == 둘 다 객체를 비교하고 판단하는 데 사용되지만 객체를 비교하고 판단하는 내용은 다릅니다. 구체적인 차이점을 살펴볼까요?

파이썬에서 is와 == 부호의 차이점

는 두 개체의 id 값이 동일한지, 즉 두 개체가 동일한 인스턴스 개체이고 동일한 메모리 주소를 가리키는지 비교합니다.

== 두 개체의 내용이 동일한지 비교합니다. 기본적으로 개체의 __eq__ 메서드가 호출됩니다.

==는 Python 표준 연산자 중 비교 연산자로 두 개체의 값이 같은지 비교하고 결정하는 데 사용됩니다.

관련 추천: "Python Video Tutorial"

먼저 예제를 살펴보겠습니다.

>>> a = [1, 2, 3]
>>> b = a
>>> b is a
True
>>> b == a
True
>>> b = a[:]
>>> b is a
False
>>> b == a
True

is는 ID가 동일한지 여부를 나타내는 항등 연산자라고도 합니다.

아래 코드를 보면 변수 a와 b의 ID가 다르기 때문에 b == a는 True이고 b는 a가 False입니다.

그들의 ID를 다시 살펴보겠습니다.

>>> id(a)
4364243328
>>>
>>> id(b)
4364202696

어떤 경우에는 =입니다. = 결과는 완전히 동일합니까?

>>> a = 256
>>> b = 256
>>> a is b
True
>>> a == b
True
>>> a = 1000
>>> b = 10**3
>>> a == b
True
>>> a is b
False
>>>

그래서 숫자 유형이 완전히 동일하지는 않습니다.

그럼 왜 256에서는 같지만 1000에서는 다른 걸까요?

성능을 고려하여 Python은 정수 객체의 경우 많은 내부 최적화 작업을 수행했습니다. Python은 자주 사용되는 정수 객체를 캐시하여 Python의 전체 수명 주기 동안 필요한 모든 위치에 이를 저장합니다. 이러한 정수 개체를 참조하면 더 이상 새 개체가 생성되지 않고 캐시에 있는 개체를 직접 참조하게 됩니다.

Python은 자주 사용되는 정수 개체를 [-5, 256] 범위의 small_int에 배치합니다. 작은 정수를 사용해야 할 때마다 여기에서 가져오고 더 이상 임시로 새 개체를 만들지 마세요.

>>> c = 'miracle.young'
>>> d = 'miracle.young'
>>> c is d
False
>>> c == d
True
>>> c = 'miracleyoung'
>>> d = 'miracleyoung'
>>> c is c
True
>>> c == d
True

따라서 문자열 유형은 정확히 동일하지 않습니다. 이는 인터프리터 구현과 관련이 있습니다.

>>> a = (1,2,3) # a和b为元组类型
>>> b = (1,2,3)
>>> a is b
False
>>> a = [1,2,3] # a和b为list类型
>>> b = [1,2,3]
>>> a is b
False
>>> a = {'miracle':100,'young':1} # a和b为dict类型
>>> b = {'miracle':100,'young':1}
>>> a is b
False
>>> a = set([1,2,3]) # a和b为set类型
>>> b = set([1,2,3])
>>> a is b
False

따라서 변수가 숫자, 문자열, 튜플, 목록 또는 사전인 경우 is와 ==는 다르며 서로 바꿔서 사용할 수 없습니다! 값을 비교할 때는 ==를 사용하고, 동일한 메모리 주소인지 비교할 때는 is를 사용해야 합니다.

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

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