[ python | TIL ] 'is'와 '=='의 차이

Haksoo JI·2022년 12월 5일
0

[ TIL ]

목록 보기
5/30

Python 에서 'is'와 '=='의 차이


문제발생

python으로 flask서버에서 if 문을 사용해서 클라이언트에 보내주는 return값을 다르게 해주려고 다음과 같이 코드를 짰다.

@app.route("/main/sign/userid", methods=["POST"])
def user_id_confirm():
    user_id_receive = request.form['user_id_give']
    # print(user_id_receive)
    if user_id_receive is 'mintzzz':
        result = 'available'
    else:
        result = 'fail'
    # print(result)
    # print(type(result))
    return jsonify({'result': result})

그런데 user_id_reeive의 값이 분명 mintzzz로 출력되는데도 result값은 'fail'이 나왔다. print()로 출력해보면 원인은 if문 안에 있는 것으로 보여서 의심가는 것들을 바꿔보았다. 그 중에 is가 뭔가 미심쩍었다. 평소에 자주 써보지 않은 문법이었고 ==과는 무엇이 다른지 정확히 공부한 적이 없었기 때문이다.


해결

is==으로 바꿔서 코드를 재실행해보니 원하는 결과가 나왔다. 그래서 두 문법이 다르다는 사실이 유추되었고, 무엇이 어떻게 다른지 구글링을 통해 찾아보았다.

'is'와 '=' 차이

  • is는 변수가 같은 Object(객체)를 가리키면 True
  • ==는 변수가 같은 Value(값)을 가지면 True

'is'의 예시

a = [1,2,3]
b = a
c = [1,2,3]
a is b		# True
a is c		# False
  • a와 b는 같은 리스트 객체를 가리킨다.
  • a와 b는 같은 객체이기 때문에 True
  • a와 c는 값은 같지만 다른 객체이기 때문에 False

'=='의 예시

a = [1,2,3]
b = a
c = [1,2,3]
a == b		# True
a == c		# True
  • a와 b는 같은 리스트 객체를 가리킨다.
  • a와 b는 값들을 가진 리스트이기 때문에 True
  • a와 c는 값들을 가진 리스트이기 때문에 True


참고

https://twpower.github.io/117-difference-between-python-is-and-double-equal

profile
아직 씨앗입니다. 무슨 나무가 될까요?

0개의 댓글