<개인공부>/[Python]

[python] 파이썬 is와 ==의 차이 (값, 참조)

BlockDMask 2021. 11. 5. 21:00
반응형

안녕하세요. 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

감사합니다.

반응형