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

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


파이썬 프로그래밍에서 is 연산자와 ==(equals) 연산자는 겉보기에 비슷하게 동작하는 것처럼 보이지만, 실제로는 완전히 다른 목적을 가진 연산자입니다.

  • == 연산자: 두 변수의 이 서로 같은지를 비교합니다.
  • is 연산자: 두 변수가 동일한 객체(메모리상의 같은 주소)를 가리키고 있는지를 확인합니다.

즉, ==는 '내용이 같은가'를 묻는 반면, is는 '정말 같은 객체인가'를 묻는 연산자라고 이해하면 됩니다.

예제 코드

# Python program to
# illustrate the
# difference between
# == and is operator
# [] is an empty list
list1 = []
list2 = []
list3 = list1

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")

실행 결과

True
False
True

결과 분석

  1. list1 == list2 → True
    두 변수 모두 빈 리스트([])로, 내용(값)이 동일하기 때문에 == 비교 결과는 True입니다.
  2. list1 is list2 → False
    list1list2는 각각 별도로 생성된 서로 다른 리스트 객체입니다. 값은 같아도 메모리상에서 서로 다른 위치에 존재하므로 is 비교 결과는 False입니다.
  3. list1 is list3 → True
    list3 = list1 구문은 새로운 객체를 만드는 것이 아니라 list1이 가리키는 객체의 참조를 복사합니다. 따라서 두 변수는 완전히 동일한 객체를 공유하므로 is 비교 결과는 True입니다.

추가 팁: id() 함수로 객체 확인하기

id() 함수를 사용하면 각 객체의 고유한 식별자(메모리 주소)를 직접 확인할 수 있습니다.

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

위 코드를 실행해 보면 list1list3의 id 값은 같고, list2의 id 값만 다르게 출력됩니다. 이것이 is 연산자가 실제로 비교하는 대상입니다.

정리

값의 동등성을 검사할 때는 ==를, 객체의 동일성(참조 여부)을 검사할 때는 is를 사용하는 것이 올바른 파이썬 코딩 습관입니다. 특히 None과의 비교 시에는 관례적으로 x is None 형태를 사용하는 점도 함께 기억해 두면 좋습니다.