'is'와 '=='의 차이

Seong Woong Kim·2023년 3월 15일
0

Python

목록 보기
9/18

💡 이 글은 쪼개진 조각처럼 부분별로 알고 있는 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가 나옵니다.

  • 왜냐하면 1은 정수 객체, 1.0은 실수 객체이므로 두 객체는 서로 다르기 때문입니다

마찬가지로, 변수에 각각 같은 값을 할당해도 그것들은 다른 객체이므로 다른 메모리 주소를 가집니다.

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

두 객체의 고유한 값이 다르므로 서로 다른 객체입니다.

  • 그래서 1과 1.0을 is로 비교하면 False가 나옵니다.
  • is, is not은 클래스로 객체를 만든 뒤에 객체가 서로 같은지 비교할 때 주로 사용합니다.




값 비교에 is를 쓰지 않기


값을 비교할 때는 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가 아닌 비교 연산자를 사용해야 합니다

profile
성장과 연구하는 자세를 추구하는 AI 연구개발자

0개의 댓글