Python에서 ==와 is는 비슷해 보이지만 비교하는 대상이 다릅니다.
== : 두 객체의 값이 같은지 비교is : 두 변수가 완전히 동일한 객체를 가리키는지 비교==는 값을 비교한다예를 들어 내용이 같은 리스트 두 개를 각각 만들면:
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입니다.
is는 같은 객체인지 비교한다이번에는 b에 a를 그대로 대입해봅니다.
a = [1, 2]
b = a
print(a == b) # True
print(a is b) # True
이 경우 a와 b는 같은 리스트 객체를 가리킵니다.
a ─┐
├──→ [1, 2]
b ─┘
값도 같고, 가리키는 객체도 같기 때문에 둘 다 True입니다.
None은 왜 is로 비교할까?None은 Python에서 값이 없음을 나타내는 특별한 값입니다.
visited = None
None 객체는 하나만 존재하기 때문에 보통 is를 사용해서 확인합니다.
if visited is None:
visited = []
이 코드는 다음 의미입니다.
visited가 정확히None객체를 가리키고 있는가?
반대로 None이 아닌지 확인할 때는:
if visited is not None:
print("값이 있음")
처럼 사용합니다.
==를 쓰고 언제 is를 쓸까?일반적인 값 비교에는 ==를 사용합니다.
age == 20
name == "철수"
numbers == [1, 2, 3]
None인지 확인할 때는 is를 사용합니다.
visited is None
visited is not None
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