Python Basic : ==와 is의 차이 (difference between == and is)
==와 is의 차이는 다음과 같습니다.
==는 값만을 비교해서 동일한 값이면 True, 다른 값이면 False를 return합니다.
is는 값도 같아야 하며 값이 저장된 memory 주소도 동일해야 True를 return합니다. (값이 같다고 해도 memory 주소가 다르면 False를 return합니다. 값이 다르면 당연히 False return하구요.)
x = 10
y = 10
print(x == y)
print(x is y)
print(id(x))
print(id(y))
-- Result
True
True
4320574984
4320574984
x와 y에 10이라는 동일한 값을 할당했습니다.
둘 다 값이 같으니 ==의 결과는 True입니다.
둘 다 값도 같고 거기에 memory 주소도 같으니 is의 결과도 True입니다.
참고
memory에 저장된 주소 보기 (id method)
https://cosmosproject.tistory.com/884
x = int(10)
y = float(10)
print(x == y)
print(x is y)
print(id(x))
print(id(y))
-- Result
True
False
4320574984
4322043184
x와 y에 저장된 값은 10으로 동일하지만 x는 int이며 y는 float입니다.
따라서 값은 같으므로 ==의 결과는 True입니다.
다만 data type이 달라 memory address도 다르므로 is의 결과는 False입니다.
x = [10, 11, 12]
y = [10, 11, 12]
print(x == y)
print(x is y)
print(id(x))
print(id(y))
-- Result
True
False
4322941184
4323040896
x와 y에는 동일한 값을 담은 list를 할당하였습니다.
이 둘의 값은 같으므로 ==의 결과는 True입니다.
다만 이 둘이 저장된 memory address는 다르므로 is의 결과는 False입니다.
x = True
y = True
print(x == y)
print(x is y)
print(id(x))
print(id(y))
-- Result
True
True
4456966392
4456966392
boolean도 동일한 결과를 나타냅니다.
is는 두 객체가 값도 같으며 같은 객체인지를 판단하는겁니다.
Python에서 True, False같은 boolean이나 None 같은 값은 동일한 값이며 서로 다른 객체일 수 없는 프로그램 전체에서 하나의 객체로 존재합니다.
그래서 이러한 값들을 비교할 때에는 is를 써서 객체 자체의 동일함 판단을 하는게 더 정확할 수는 있습니다.
대부분의 일반적인 경우에서의 값 비교는 ==를 사용합니다.
is는 같은 객체인지를 비교할 때 사용합니다.
if x is None: -> 이런 경우는 None의 값 뿐 아니라 객체까지 비교하는 것이므로 더 정확한 비교가 가능하여 권장되는 상황입니다.
if x is True: -> 이건 가능하고 사용해도 됩니다. 다만 if x:로도 충분히 표현 가능하기에 if x:만으로 사용하는 것도 좋습니다.