Python에서 '=='와 'is'의 차이

김우진·2026년 9월 4일

크래프톤 정글

목록 보기
6/26

Python에서 ==와 is는 비슷해 보이지만 비교하는 대상이 다릅니다.

  • == : 두 객체의 값이 같은지 비교
  • is : 두 변수가 완전히 동일한 객체를 가리키는지 비교

1. ==는 값을 비교한다

예를 들어 내용이 같은 리스트 두 개를 각각 만들면:

a = [1, 2]
b = [1, 2]

print(a == b)  # True
print(a is b)  # False

a와 b의 리스트 내용은 같습니다.

[1, 2] == [1, 2]

따라서 a == b는 True입니다.

하지만 두 리스트는 각각 따로 만들어진 객체입니다.

a ──→ [1, 2]

b ──→ [1, 2]

그래서 a is b는 False입니다.


2. is는 같은 객체인지 비교한다

이번에는 b에 a를 그대로 대입해봅니다.

a = [1, 2]
b = a

print(a == b)  # True
print(a is b)  # True

이 경우 a와 b는 같은 리스트 객체를 가리킵니다.

a ─┐
   ├──→ [1, 2]
b ─┘

값도 같고, 가리키는 객체도 같기 때문에 둘 다 True입니다.


3. None은 왜 is로 비교할까?

None은 Python에서 값이 없음을 나타내는 특별한 값입니다.

visited = None

None 객체는 하나만 존재하기 때문에 보통 is를 사용해서 확인합니다.

if visited is None:
    visited = []

이 코드는 다음 의미입니다.

visited가 정확히 None 객체를 가리키고 있는가?

반대로 None이 아닌지 확인할 때는:

if visited is not None:
    print("값이 있음")

처럼 사용합니다.


4. 언제 ==를 쓰고 언제 is를 쓸까?

일반적인 값 비교에는 ==를 사용합니다.

age == 20
name == "철수"
numbers == [1, 2, 3]

None인지 확인할 때는 is를 사용합니다.

visited is None
visited is not None

5. True, False는?

True와 False도 특별한 객체이지만, 보통 is True, is False처럼 비교하지 않습니다.

대신 조건 자체를 확인합니다.

if enabled:
    print("활성화됨")

반대는:

if not enabled:
    print("비활성화됨")

보통 아래처럼 작성할 필요는 없습니다.

if enabled is True:
    ...

핵심 정리

연산자의미
==두 객체의 값이 같은가?
is두 변수가 같은 객체를 가리키는가?

한 줄로 정리하면:

==는 값 비교, is는 객체 동일성 비교다.

특히 None을 비교할 때는 다음 형태를 사용한다.

x is None
x is not None

0개의 댓글