is


   -식별 연산자(identity operator)로서 값이 아닌 주소를 비교한다.

 

==


   -비교 연산자로서 값을 비교한다.

 

 

 

예시

n1 = 257
n2 = 257

s1 = "duck"
s2 = "duck"

print(n1 == n2)
print(n1 is n2)

print(s1 == s2)
print(s1 is s2)

>>True
>>True
>>True
>>True
n1 = 257
n2 = 256

s1 = "duck"
s2 = "duc"

print(n1 == n2+1)
print(n1 is n2+1)

print(s1 == (s2+'k'))
print(s1 is (s2+'k'))

>>True
>>False
>>True
>>False

 

위의 예시는 모두 True가 나온 것을 볼 수 있고 

아래의 예시는 is 연산에서 False가 나온 것을 볼 수 있다.

 

파이썬은 새로운 변수에 할당하려는 값이 이미 메모리에 존재하면 새로운 값을 생성하지 않고

기존에 존재하는 메모리를 가리키게 한다.

 

아래의 예시를 보면

연산의 값은 257, duck 둘 다 동일하나 n1과 n2(s1과 s2)가 가리키는 메모리 주소가 다르기 때문에 is연산에서는 False가 반환되는 것을 볼 수 있다.

 

n1 = 257
n2 = 256

s1 = "duck"
s2 = "duc"

print(id(n1))
print(id(n2+1))

print(id(s1))
print(id(s2+'k'))

>>1356657452880
>>1356657452464
>>1356657710840
>>1356686985848

#메모리 주소값이 다른 것을 확인할 수 있다.

 

※예시와 다르게 257보다 작은 양의 정수를 사용하면 is연산을 해도 True값이 나오는 것을 볼 수 있다. 

  Python은 자주 사용되는 작은 정수, [-5,256] 범위의 정수들을 미리 캐싱해놓기 때문에 해당 범위의 값은 항상 같은 주    소를 가리킨다.

'Python' 카테고리의 다른 글

Python - 딕셔너리 키(key), 값(value) 도치  (0) 2020.08.04
Python - with 문  (0) 2020.08.01
Python - 에일리어스(alias)  (0) 2020.07.29
Python - 모듈(module)  (0) 2020.07.27
Python - 단락 평가(Short-circuit Evaluation)  (0) 2020.07.26

+ Recent posts