본문 바로가기

파이썬에서 is와 == 연산자의 차이점 이해하기

오토씨 2025. 3. 12.

파이썬에서 객체를 비교할 때 is== 연산자는 서로 다른 개념을 검사합니다. 이 두 연산자의 차이점을 명확히 이해하면 더 효율적인 코드를 작성할 수 있습니다.

파이썬에서 is와 == 연산자의 차이점 이해하기



기본 개념: 동일성과 동등성

파이썬에서는 두 가지 비교 개념이 있습니다:

동일성(Identity): 두 변수가 메모리 상에서 같은 객체를 참조하는지를 확인합니다. is 연산자로 검사합니다.

동등성(Equality): 두 객체의 값이 같은지를 확인합니다. == 연산자로 검사합니다.

== 연산자: 값의 비교

== 연산자는 객체의 내용이 같은지 비교합니다. 이는 클래스의 __eq__() 메서드에 의해 결정됩니다.

a = [1, 2, 3]
b = [1, 2, 3]
print(a == b)  # True - 두 리스트의 값이 동일함

is 연산자: 객체 참조의 비교

is 연산자는 두 변수가 동일한 객체를 가리키는지 확인합니다. 내부적으로 각 객체의 ID(메모리 주소)를 비교합니다.

a = [1, 2, 3]
b = [1, 2, 3]
c = a
print(a is b)  # False - 다른 객체를 참조함
print(a is c)  # True - 같은 객체를 참조함

주요 사용 사례와 예제

컬렉션 객체의 비교

리스트, 딕셔너리 등은 같은 값을 가져도 다른 객체일 수 있습니다.

a = [1, 2, 3]
b = [1, 2, 3]
print(a == b)  # True - 값이 같음
print(a is b)  # False - 다른 객체임

변수 할당과 참조

a = [1, 2, 3]
b = a  # b는 a와 동일한 객체를 참조
print(a is b)  # True - 같은 객체임
a.append(4)
print(b)  # [1, 2, 3, 4] - a를 수정하면 b도 변경됨

정수와 문자열의 특이점

파이썬은 작은 정수(-5부터 256까지)와 짧은 문자열을 캐싱합니다.

a = 10
b = 10
print(a is b)  # True - 작은 정수는 캐싱됨

c = 257
d = 257
print(c is d)  # False - 범위를 벗어난 정수는 별도 객체

올바른 사용 지침

  1. None, True, False 비교: is 연산자를 사용하세요.
  2. if variable is None: # 처리
  3. 값 비교: 일반적인 값 비교에는 == 연산자를 사용하세요.
  4. if user_input == "quit": # 처리
  5. 객체 참조 비교: 두 변수가 정확히 같은 객체를 가리키는지 확인할 때만 is를 사용하세요.

결론

is는 객체의 동일성(Identity)을 비교하고, ==는 객체의 동등성(Equality)을 비교합니다. None이나 불리언 값을 비교할 때는 is를 사용하고, 값을 비교할 때는 ==를 사용하는 것이 바람직합니다. 올바른 연산자 선택은 코드의 가독성과 정확성을 높이는 데 중요합니다.

댓글