Python 변수 값 비교하기 (is, ==의 차이) / Value Comparison
Value Eqaulity
변수를 비교하는 방법은 두 가지가 있다.
그런데 비교하기 앞서 "비교한다"의 의미부터 명확히 할 필요가 있다.
두 객체를 비교할 때, 메모리 주소와 상관없이 값만 비교하거나 혹은 값은 물론 메모리 주소까지 같은지 비교할 수 있다.
첫째로, 값만 비교하는 연산자는 == / != 이다.
이 연산자는 자료형, 메모리주소는 따지지도 않고 그냥 값이 같으면 True를 리턴한다.
예를들어 a = 10.0 b= 10+0j 라고 할 때 a는 float, b는 complex 자료형이더라도 값은 10이므로 a == b는 True를 리턴한다.
반면에 is / is not 연산자는 값은 물론 메모리 주소까지도 비교하고 이 두 가지가 모두 같아야만 True를 리턴한다.
위의 예시에서 a is b는 다른 자료형이므로 당연히 False가 return된다.
추가로, None 객체에 대해 알아보자.
None은 값이 Empty인 객체라고 이해하면 쉽다. id(None)을 해보면 메모리 주소가 있고 type(None)은 Nonetype 리턴된다.
애플리케이션의 생애주기에서 모든 None값은 Shared Reference이다. 따라서 모든 None으로 지정 된 값은 같은 메모리주소를 가리킨다. (Empty인 값을 굳이 매번 새로 만들어서 메모리 낭비하는 일은 바람직하지 않으니 당연한 노릇이다.)
예시) a = None; b= None; c = None일 때 a is b is c는 True를 리턴한다.
변수를 비교하는 방법은 두 가지가 있다.
그런데 비교하기 앞서 "비교한다"의 의미부터 명확히 할 필요가 있다.
두 객체를 비교할 때, 메모리 주소와 상관없이 값만 비교하거나 혹은 값은 물론 메모리 주소까지 같은지 비교할 수 있다.
첫째로, 값만 비교하는 연산자는 == / != 이다.
이 연산자는 자료형, 메모리주소는 따지지도 않고 그냥 값이 같으면 True를 리턴한다.
예를들어 a = 10.0 b= 10+0j 라고 할 때 a는 float, b는 complex 자료형이더라도 값은 10이므로 a == b는 True를 리턴한다.
반면에 is / is not 연산자는 값은 물론 메모리 주소까지도 비교하고 이 두 가지가 모두 같아야만 True를 리턴한다.
위의 예시에서 a is b는 다른 자료형이므로 당연히 False가 return된다.
추가로, None 객체에 대해 알아보자.
None은 값이 Empty인 객체라고 이해하면 쉽다. id(None)을 해보면 메모리 주소가 있고 type(None)은 Nonetype 리턴된다.
애플리케이션의 생애주기에서 모든 None값은 Shared Reference이다. 따라서 모든 None으로 지정 된 값은 같은 메모리주소를 가리킨다. (Empty인 값을 굳이 매번 새로 만들어서 메모리 낭비하는 일은 바람직하지 않으니 당연한 노릇이다.)
예시) a = None; b= None; c = None일 때 a is b is c는 True를 리턴한다.
댓글
댓글 쓰기