파이썬 ==와 is의 차이 이해하기
Django View에서 if문을 사용하면서 is와 ==로 조건을 걸었는데, 두 경우에 결과가 다르게 나와서 둘의 차이점이 궁금했다. 코드를 작성할 때는 무심코 사용했지만, 실제로 어떤 기준에서 결과가 달라지는지 명확하게 알고 싶어졌다. 그래서 이번 기회에 Python에서 ==와 is의 차이를 깊이 있게 알아보려고 한다.
먼저, ==는 값 비교를 할 때 사용되는 연산자다. 쉽게 말해, 두 개의 객체가 같은 내용을 가지고 있는지 확인하는 것이지. 예를 들어, A와 B가 같은 동전을 가지고 있다고 생각해보자. 동전의 가치나 모양이 같으면, A의 동전과 B의 동전은 서로 같다고 볼 수 있다. 그래서 A의 동전 == B의 동전이라고 하면 True가 된다.
코드로 보면 이렇게 표현할 수 있다:
coin_A = "동전1" # 동전 A
coin_B = "동전1" # 동전 B
print(coin_A == coin_B) # True: 두 동전은 같은 가치를 가짐
이렇게 == 연산자는 동전의 가치를 비교하는 것과 같다. 동전 A와 B의 내용이 같으니까 결과가 True가 되는 것이다.
그 다음에 is에 대해 이야기해보겠다. 이 연산자는 정체성 비교를 할 때 사용한다. 즉, 두 객체가 같은 객체인지, 같은 메모리 주소를 참조하는지를 확인하는 것이다. 다시 동전 비유로 돌아가서, A가 가진 동전과 B가 가진 동전이 동일한 동전인지 확인한다고 해보자. A의 동전과 B의 동전이 같은 가치라도, 실제로 같은 동전인지, 즉 같은 소유주가 있는지를 확인하는 것이다.
코드 예시로는 다음과 같다:
coin_A = "동전1" # 동전 A
coin_B = coin_A # coin_B는 coin_A와 같은 동전
coin_C = "동전1" # coin_C는 별개의 동전
print(coin_A is coin_B) # True: 두 동전은 같은 동전
print(coin_A is coin_C) # False: coin_A와 coin_C는 다른 동전
이렇게 is 연산자는 동전의 소유주를 비교하는 것과 같다. coin_B는 coin_A와 같은 동전을 가리키고 있지만, coin_C는 같은 내용을 가지고 있지만 다른 동전이므로 False가 된다.
오늘 하루를 정리하자면, ==는 동전의 가치를 비교하는 것이고, is는 동전의 정체성을 비교하는 것이다. 이 두 개념이 어떻게 다른지를 이해하면서, 앞으로 코드를 작성할 때 더 정확하게 사용할 수 있을 것 같다.
내일도 더 많은 내용을 배우고 연습해봐야 한다. 코딩은 아직 어렵지만, 이렇게 배운 내용을 정리하는 과정이 정말 재미있다. 오늘도 좋은 하루였다!