Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python에서 ==와 is 연산자의 차이점 완벽 정리

Python에는 두 가지 비교 연산자가 있습니다: ==is. 이 둘은 비슷해 보이지만 완전히 다른 목적으로 사용되며, 이 차이를 이해하는 것은 버그 없는 코드를 작성하는 데 매우 중요합니다.

== 연산자: 값의 동등성 비교

== 연산자는 두 피연산자의 값(value)이 서로 같은지를 비교합니다. 즉, 두 객체가 메모리상에서 다른 위치에 있더라도 내용이 동일하다면 True를 반환합니다.

is 연산자: 객체의 동일성(정체성) 비교

is 연산자는 두 피연산자가 완전히 동일한 객체, 즉 메모리에서 같은 주소를 가리키는지를 확인합니다. Python의 내장 함수 id()는 각 객체의 고유한 메모리 식별자를 반환하며, a is b는 사실상 id(a) == id(b)와 같은 의미입니다.

예제 코드

아래 예제를 통해 두 연산자의 차이를 직접 확인할 수 있습니다.

list1 = [1]
list2 = [1]
list3 = list1

print(id(list1))
print(id(list2))

if (list1 == list2):
    print("True")
else:
    print("False")

if (list1 is list2):
    print("True")
else:
    print("False")

if (list1 is list3):
    print("True")
else:
    print("False")

여기서 list1list2는 값은 같지만 별도로 생성된 서로 다른 리스트 객체입니다. 반면 list3 = list1은 새 객체를 만드는 것이 아니라 list1과 같은 객체를 참조하므로, 세 변수 중 list1list3만 동일한 객체입니다.

실행 결과

140380664377096
140380664376904
True
False
True

결과 분석

  • list1 == list2 → True: 두 리스트의 값(요소)이 [1]로 동일하기 때문입니다.
  • list1 is list2 → False: 출력된 id() 값이 다르듯, 두 리스트는 서로 다른 메모리 주소에 있는 별개의 객체이기 때문입니다.
  • list1 is list3 → True: list3list1과 같은 객체를 참조하므로 동일한 객체입니다.

어떤 연산자를 사용해야 할까?

일반적인 값 비교에는 항상 ==를 사용해야 합니다. isx is None처럼 싱글턴(singleton) 객체와의 비교에만 사용하는 것이 권장됩니다. 특히 정수나 문자열처럼 작은 객체는 Python이 내부적으로 캐싱(interning)하기 때문에 is 비교가 우연히 True를 반환할 수 있어, 이를 값 비교 용도로 사용하면 예측 불가능한 버그를 유발할 수 있습니다.