Python에 있는 비교문 중에 is 와 == 의 차이를 알아보자.
둘다 비교문이지만 잘못 사용하면 다른 결과가 나온다. 우선 예제를 보자.
# is 사용 a = 1 b = 1 >>> a is b True a = "str" b = "str" >>> a is b True # == 사용 a = 1 b = 1 >>> a == b True a = "str" b = "str" >>> a == b True
동일하게 모두 숫자나 문자 둘다 비교해 봐도 둘다 True 가 나온다.
차이가 없다. 과연그럴까 아래 예제를 보자.
# == 사용 a = "This is Anfield, This is Anfield, This is Anfield" b = "This is Anfield, This is Anfield, This is Anfield" >>> a == b True a = 12345789130 b = 12345789129 +1 >>> a == b True # is 사용시 a = "This is Anfield, This is Anfield, This is Anfield" b = "This is Anfield, This is Anfield, This is Anfield" >>> a is b False a = 12345789130 b = 12345789129+1 >>> a is b False
엇? 동일한데 예상과는 다르게 같은 값인데도 불구하고 is 를 사용했을때는 false 가 나온다.
이유를 알아보자.
is 는 비교연산자가 맞기는 맞다!
사실 is 는 == 와 달리 값을 비교하는게 아니라 레퍼런스 즉 포인터를 비교한다.
맞다 그 C 의 그 포인터...
Python 에서 변수는 내부적 으로 데이터를 가르키는게 아니라 인스턴스 포인터를 가르킨다.
그러나 C에서 처럼 액세스를 할수는 없다.
그럼 이제 위 예제에서 왜 False 가 나오는지 보면 우선 긴 문자열을 변수에 대입시키면
새로운 메모리 공간이 할당된다.
그러면 두 변수는 서로 다른 메모리 할당을 받기 때문에 서로 포인터가 다르기에 False가 나온다.
아래 숫자도 마찬가지도 +1로 계산을 하면 값은 같지만 메모리 할당공간이 서로 다르다.
인스턴스 값을 비교하는 is 연산자는 당연히 두변수의 인스턴스 값이 다르기 때문에 False 를 반환한다.
이러해서 'is' 연산자는 포인터(레퍼런스)를 비교하는 연산자이지 데이터를 비교하는 연산자가 아니라점을
확인할수 있다.
고로 is 연산자는 가급적 None, True, False 등을 비교할때 사용하자.
제가 이미지 업로드 하면 파일 타입으 ... |
감사합니다 |
참고하시라고 적어봅니다. 저는 위에 ... |
asp용 소스 부탁드립니다. 외부가 아닌 ... |
특정일 선택막기에서 for문이랑 if($. ... |
워드프레스를 시작한지 어언 6일... ... |
이미지 사이즈가 계속 0으로 나와서 애 ... |
감사합니다! |
음.. 메일로 보내 드릴게요 |
Comment Write
Comment List