컴퓨터 공부/🐍 Python

[Python] is와 == / and와 & / or과 |

letzgorats 2021. 6. 26. 02:23

 언뜻보면 비슷하다고 느껴지는 연산자들의 차이가 무엇인지 알아보자.

 

먼저, is와 == 이다.

is

  • identity 연산자 (식별 연산자)
  • reference comparison (참조 비교) --> 주소 비교!

==

  • 비교 연산자
  • value comparison (값 비교)

 

뭐든 예시를 살펴보면서, 이해하는것이 가장 빠르니까 예를 한번 살펴보자.

왼쪽 코드와 같이 print문을 출력해보면 모두 값이 True가 나온다.

그렇다면, 값을 변경해보면 어떨까?

== 연산은 여전히 다 True가 나왔지만, is연산에서는 False 가 나왔다.

앞서 소개했듯이, is 연산이 값비교가 아닌 주소 비교 연산자이기 때문이다.

파이썬은 새로운 변수에 할당하려는 값이 이미 메모리에 존재하면 새로운 값을 생성하지 않고

기존에 존재하는 메모리를 가리키게 한다.

 

메모리 주소를 가리키는 것이 어떻게 다른지 id값을 찍어보면 아래와 같다.

값은 257과 'AlooCoding'으로 동일하나 주소값은 다 다른것을 확인할 수 있다.

이러한 이유로, is연산자를 통한 결과는 False가 나온 것이다.

 

※ 예시와 다르게 257보다 작은 양의 정수를 사용하면 is연산을 해도 True값이 나오는 것을 볼 수 있다. 

  Python은 자주 사용되는 작은 정수, [-5,256] 범위의 정수들을 미리 캐싱해놓기 때문에 해당 범위의 값은 항상 같은 주소를 가리킨다.


 

and

  • 논리 연산자
  • True, False 연산

&

  • 비교 연산자
  • bitwise 연산자

이 둘의 차이는 솔직히 비교와 논리연산자이기 때문이 구분이 쉽다. 파이썬에서는 && 대신 and를 사용하면 된다. 비교연산자이자 bitwise 연산자인 &을 활용한 bitwise 연산의 예를 살펴보고 

and 연산자는 앞 피연산자가 True이면 그냥 바로 뒤에 있는 피연산자를 출력하는 예도 살펴보자.

 


or

  • 논리 연산자
  • True, False 연산

|

  • 비교 연산자
  • bitwise 연산자

 

파이썬에서는 || 대신 or 연산을 사용한다고 생각하면 된다.

or 연산자는 앞 피연산자가 True면 그냥 바로 그 값을 출력한다. 마찬가지로, 앞 연산자가 False면, 그냥 바로 뒤에 있는 피연산자를 출력한다. 

 

 

 

반응형