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

파이썬 객체 비교: 'is' 연산자 vs '==' 연산자 차이 완벽 정리

파이썬에서 객체를 비교할 때 사용하는 두 가지 방법, 즉 is 연산자와 동등 비교 연산자 ==의 차이점에 대해 알아보겠습니다.

동등 연산자(==)는 인자로 전달된 객체의 을 기준으로 비교하는 반면, is 연산자는 두 객체의 참조(메모리 주소)가 같은지를 비교합니다.

즉, 동등 연산자는 참조 위치와 상관없이 내용만 비교합니다. 서로 다른 메모리 위치에 저장되어 있어도 내용이 같다면 동일한 것으로 판단하여 True를 반환합니다. 반면 is 연산자는 참조가 최우선 기준이므로, 내용이 같더라도 메모리상 서로 다른 객체라면 False를 반환합니다.

아래 예제를 통해 이 개념을 직접 확인해 보겠습니다.

예제 코드

list_1 = ['t','u','t','o','r']
list_2 = ['t','u','t','o','r']
list_3 = list_1

if (list_1 == list_2):
    print("True")
else:
    print("False")

if (list_1 is list_2):
    print("True")
else:
    print("False")

if (list_1 is list_3):
    print("True")
else:
    print("False")

실행 결과

True
False
True

위 그림에서 볼 수 있듯이 모든 변수는 지역 범위(local scope)에 선언되어 있으며, 각 변수가 가리키는 참조 관계를 확인할 수 있습니다.

  • list_1list_2는 내용은 같지만 서로 다른 메모리 객체이므로 == 비교는 True, is 비교는 False입니다.
  • list_3list_1과 동일한 객체를 참조하므로 is 비교 결과 True입니다.

추가 팁: id() 함수로 참조 확인하기

id() 내장 함수를 사용하면 각 객체의 고유한 식별자(메모리 주소)를 확인할 수 있어, is 연산자의 동작 원리를 더 명확하게 이해하는 데 도움이 됩니다.

print(id(list_1))  # list_3과 동일한 값 출력
print(id(list_2))  # 다른 값 출력
print(id(list_3))  # list_1과 동일한 값 출력

결론

이번 글에서는 파이썬 객체 비교 시 사용되는 동등 연산자(==)와 참조 비교 연산자(is)의 차이를 살펴보았습니다. 값 자체를 비교할 때는 ==를, 객체의 동일성(정체성)을 확인할 때는 is를 사용하는 것이 올바른 파이썬 코딩 스타일입니다. 특히 None 여부를 검사할 때는 if x is None: 형태로 작성하는 것이 공식적으로 권장됩니다.