>  기사  >  백엔드 개발  >  Python의 is 및 ==에 대한 자세한 분석(코드 포함)

Python의 is 및 ==에 대한 자세한 분석(코드 포함)

不言
不言앞으로
2019-03-21 16:03:372481검색

이 기사는 Python의 is 및 ==에 대한 자세한 분석을 제공합니다(코드 포함). 필요한 친구가 참고할 수 있기를 바랍니다.

파이썬에서는 모든 것이 객체입니다.

Python의 객체에 포함된 세 가지 기본 요소는 다음과 같습니다.

  • id(ID)
  • type(데이터 유형)
  • value(값)

객체가 같은지 비교하려면 == 를 사용할 수 있습니다. is를 사용할 수도 있습니다.

is와 ==는 모두 대상을 비교하고 판단하는 데 사용되지만 대상을 비교하고 판단하는 내용은 다릅니다. 구체적인 차이점을 살펴볼까요?

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

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

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

먼저 예를 살펴보겠습니다

>>> 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를 사용해야 합니다.
물론 개발에서도 비교되는 경우가 많습니다.

이 기사는 여기서 끝났습니다. 더 흥미로운 내용을 보려면 PHP 중국어 웹사이트의 python 튜토리얼 비디오 칼럼을 주목하세요!

위 내용은 Python의 is 및 ==에 대한 자세한 분석(코드 포함)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 segmentfault.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제