💡 이 글은 쪼개진 조각처럼 부분별로 알고 있는 Python을
AtoZ부터 다시 끝까지 다져보자
라는 생각으로 파이썬 코딩 도장에서 공부한 것을 정리하는 글 & 시리즈입니다. 💡
==
, !=
는 값 자체를 비교하고
is
, is not
은 객체(object)를 비교합니다
>>> 1 == 1.0
True
>>> 1 is 1.0
False
>>> 1 is not 1.0
True
1과 1.0은 정수와 실수라는 차이점이 있지만 값은 같습니다
.
True
가 나옵니다. 하지만 1과 1.0을 is
로 비교해보면 False
가 나옵니다.
두 객체는 서로 다르기 때문입니다
마찬가지로, 변수에 각각 같은 값을 할당해도 그것들은 다른 객체
이므로 다른 메모리 주소를 가집니다.
x = ['orange', 'banana', 'apple']
y = ['orange', 'banana', 'apple']
print(f"x == y : {x==y}")
print(f"x is y : {x is y}")
print(f"x value, id : {x}, {hex(id(x))}")
print(f"y value, id : {y}, {hex(id(y))}") # 객체 주소값이 다름
>>> x == y : True
>>> x is y : False
>>> x value, id : ['orange', 'banana', 'apple'], 0x7f28e01c5a40
>>> y value, id : ['orange', 'banana', 'apple'], 0x7f28e2add740
정수 객체와 실수 객체가 서로 다른지 확인하려면 id 함수
를 사용하면 됩니다.
id
는 객체의 고유한 값(메모리 주소)을 구합니다
이 값은 파이썬을 실행하는 동안에는 계속 유지되며 다시 실행하면 달라집니다).
>>> id(1)
1714767504
>>> id(1.0)
55320032
두 객체의 고유한 값이 다르므로 서로 다른 객체입니다.
값을 비교할 때는 is
를 사용하면 안 됩니다.
다음과 같이 변수 a에 -5를 할당한 뒤 a is -5를 실행하면 True가 나오지만 다시 -6을 할당한 뒤 a is -6을 실행하면 False가 나옵니다.
>>> a = -5
>>> a is -5
True
>>> a = -6
>>> a is -6
False
왜냐하면 변수 a가 있는 상태에서 다른 값을 할당하면 메모리 주소가 달라질 수 있기 때문
입니다.
다른 객체
가 되므로 값이 같더라도 is로 비교하면 False
가 나옵니다. 값(숫자)를 비교할 때는 is가 아닌 비교 연산자를 사용해야 합니다