안녕하세요. BlockDMask입니다.
오늘은 파이썬에서 "A랑 B가 같냐?"를 판단할 때 사용하는 is, == 의 차이점과 언제 언제 사용하는 적절한 사용 시점에 대해서 이야기해보겠습니다.
<목차>
1. is, == 차이점 및 기본 설명
2, ==, is 예제
1. 파이썬 is와 == 설명 및 차이점
파이썬에서 같은지 다른지를 확인하는 데 사용하는 것이 == 기호와 is 키워드입니다.
is와 == 은 정확한 사용법을 알고 작업을 해야 합니다. (많이 다르기 때문이죠)
1-1) 파이썬에서 값이 같은지 확인 "=="
A == B
A와 B의 값이 같은 경우 True를 반환합니다.
A와 B의 값이 다른 경우 False를 반환합니다.
A와 B가 참조가 같든 다르든 상관없이 오직 "값"이 같은지만 확인합니다.
* 번외로 != 는
A != B 일 때
A와 B의 값이 다른 경우 True를 반환하고
A와 B의 값이 같은 경우 False를 반환합니다.
1-2) 파이썬에서 참조가 같은지 확인 "is"
A is B
A와 B의 참조가 같은 경우 True 를 반환합니다.
A와 B의 참조가 다른 경우 False를 반환합니다.
is는 참조가 같은지 확인을 합니다.
"참조가 같다"는 것은, "같은 객체를 가리키고 있다"와 동일한 뜻입니다.
즉, A와 B가 가리키는 객체가 같으면 True 인 것입니다.
당연히 같은 참조를 가지고 있으니, 값도 같겠죠?
이렇게, 변수가 가리키고 있는 객체(주소)가 같은지를 확인할 때 is 를 사용합니다.
1-3) 요약 및 정리
값이 같은지 확인하려면 == 을 사용하시면 되고,
참조가 같은지를 확인하려면 is를 사용하시면 됩니다.
좀 더 자세히 정리하자면
값과 참조 둘 다 같은지를 알고 싶다면 is를 사용하고.
(참조가 같으면 같은 객체를 가리킬 것이고 당연히 값이 같겠죠?)
참조는 달라도 되고 값만 비교하고 싶다. 하실 때는 ==, != 을 사용하면 됩니다.
2. 파이썬 ==와 is 예제
is, == 사용 방법과 차이 한눈에 보기
# python ==, is 예제
#############################################
# 1) 값이 다르고, 참조도 다른 경우
a = 1
b = 2
print("1. 값도 다르고, 참조도 다른 경우")
print(f'a 값, 주소 : {a}, {hex(id(a))}')
print(f'b 값, 주소 : {b}, {hex(id(b))}')
print(f'a == b : {a == b}')
print(f'a is b : {a is b}')
#############################################
# 2) 값도 같고 참조도 같은 경우
c = ['block', 'dmask']
d = c
print("2. 값도 같고, 참조도 같은 경우")
print(f'c 값, 주소 : {c}, {hex(id(c))}')
print(f'd 값, 주소 : {d}, {hex(id(d))}')
# if 문을 사용하면 이렇게 사용하겠죠?
if c == d:
print('c == d 가 True 입니다')
else:
print('c == d 가 False 입니다.')
if c is d:
print('c is d 가 True 입니다')
else:
print('c is d 가 False 입니다.')
#############################################
# 3) 값이 같고 참조가 다른 경우
e = [1, 2, 3]
f = [1, 2, 3]
print("3. 값이 같고, 참조가 다른 경우")
print(f'e 값, 주소 : {e}, {hex(id(e))}') # 주소 달라요~
print(f'f 값, 주소 : {f}, {hex(id(f))}')
print(f'e == f : {e == f}')
print(f'e is f : {e is f}')
# 출력을 예쁘게 하려는 아래 코드는 삭제했습니다.
# print()
# print("="*60)
예제 1) a, b - 값이 다른 경우
a와 b처럼 값도 다르고, 참조도 다른 경우에는 a == b와 a is b 둘다 False 가 나오게 됩니다.
값이 다르니 두 경우 모두 무조건 False 겠죠?
예제 2) c, d - 값도 같고 참조도 같은 경우
c와 d를 보면 값도 참조(주소)도 같은 것을 볼 수 있습니다.
이 경우에는 c == d 로 비교해도 c is d 로 비교해도 True 가 나오게 됩니다.
예제 3) e, f - 값만 같고 참조(가리키는 객체)는 다른 경우 (*중요)
== 과 is의 결과가 다른 것이 보이시나요?
이게 ==, is의 차이입니다.
값만 같고 주소(객체, 참조)가 다르기 때문에
== 는 True 가 나오고
is는 False 가 나온 것을 알 수 있습니다.
바로 이런 경우 때문에 is와 ==을 구분해서 사용해야 하는 것입니다.
이렇게 파이썬에서 is 와 == 의 차이에 대해서 알아보았습니다.
값만 같은지 확인 ==
값과 참조가 같은지 확인 is
감사합니다.
'<개인공부> > [Python]' 카테고리의 다른 글
[python] 파이썬 리스트를 문자열로 변환 하는 방법 (2) | 2022.05.07 |
---|---|
[python] 파이썬 같지 않다 != 정리 (0) | 2021.11.15 |
[python] 파이썬 문자열 뒤집기, 거꾸로 출력 하기 3가지 방법 (0) | 2021.11.10 |
[python] 파이썬 버전 확인 방법 (윈도우, 맥북) (0) | 2021.11.08 |
[python] 현재 파일 디렉토리(폴더) 위치 구하기 (2) | 2021.10.21 |
[python] 파이썬 얕은복사, 깊은복사 (copy, deepcopy, [:], =) 총 정리 (12) | 2021.10.18 |
[python] 파이썬 mutable, immutable 객체에 관해서 (7) | 2021.10.15 |
[python] 파이썬 issubclass 클래스 포함관계 (0) | 2021.10.14 |