일상/파이썬
python is 연산자와 ==의 차이는?
정책온니
2023. 12. 31. 01:51
✅ is 연산자와 ==의 차이 관한 코드를 보자
- is 연산자는 객체의 주소값을 비교하고 (= 객체가 같은지 비교)
- ==연산자는 값을 비교한다. 둘다 비교 후 같으면 True , 다르면 False 이렇게 된다.
a = 101
b = 100+1
print("a = ",a) #a = 101
print("b = ",b) #b = 101
print(a==b) #True
print(a is b) #True
c = ['a']
d = ['a']
print("c = ",c) #c = ['a']
print("d = ",d) #d = ['a']
print(c==d) #True
print(c is d) #False
a = 101
b = 100+1
a와 b는 둘다 101이라는 값을 갖게 된다.
그런데 여기서 의문이 생긴다!!!
아니!! a도 101 b도 101 그래서 값을 비교하는 '==' 는 True 인 것은 알았어! 그런데 왜? 메모리값(=주소값)을 비교하는 is연산자도 True야?!??
사실 파이썬에서 작은 정수들(-5~256까지의정수)는 성능 최적화를 위해 정수 객체를 미리 생성하고 재사용하는 방식 사용 그러다보니 같은 값을 갖는 변수들은 메모리상에서 같은 객체를 참조 하게 된다. 101이라는 값이 작기 때문에 같은 값을 갖게 되며, 같은 객체를 갖는다고 판단하는 것!
그러면
c = ['a']
d = ['a']
print(c==d) # True
print(c is d) # False
얘들도 값이 작으니까 False가 아니라 True 여야 하는거 아니야?
얘들은 정수가 아니고, 리스트 객체라서 메모리를 다르게 사용하게 됨. 그러다보니 값은 같아도 메모리 주소값이 달라짐
a = 'apple'
b = 'apple'
print(a==b) #True
print(a is b) #True
간단한 문자열도 True True 나오게 된다