==, is는 같지 않다.
==
는 값을 비교한다.
is
는 메모리 주소를 비교한다.
파이썬에서 변수는 객체에 붙은 이름표라고 생각하자.
1 2 3 4 5
| a = [1,2,3] b = [1,2,3]
a == b a is b
|
예외 케이스
1. 정수형값
1 2 3 4 5
| a = 10 b = 10
a == b a is b
|
- Python은 메모리 최적화를 위해 -5 ~ 256 까지는 캐싱하는 싱글턴 오브젝트이다.
각 자료형 is, == 비교
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
| print('==integer==') a = 10 b = 10 print(a == b) print(a is b)
print('==float==') a = 3.15982489254324342 b = 3.15982489254324342
print(a == b) print(a is b)
print('==complex==') a = 1+4j b = 1+4j
print(a == b) print(a is b)
print('==string==') a = 'test' b = 'test'
print(a == b) print(a is b)
print('==bool==')
a = True b = True
print(a == b) print(a is b)
print('==list==') a = [] b = []
print(a == b) print(a is b)
a = [1,2] b = [1,2]
print(a == b) print(a is b)
print('==tuple==') a = () b = ()
print(a == b) print(a is b)
a = (1,2) b = (1,2)
print(a == b) print(a is b)
print('==dictionary==') a = {} b = {}
print(a == b) print(a is b)
a = {'a':1, 'b':2} b = {'a':1, 'b':2}
print(a == b) print(a is b)
|
결론
주로 ==
을 사용하지 메모리를 직접 비교하는 is
는 자주 사용되지 않고 헷갈리므로 ==
를 사용하자.