💡 이 글은 쪼개진 조각처럼 부분별로 알고 있는 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개의 댓글

관련 채용 정보

Powered by GraphCDN, the GraphQL CDN