본문 바로가기

프로그래머/Python

[Python] 파이썬 문법 - is 와 ==의 차이 | python is & ==

출처: 파이썬 알고리즘 인터뷰, 박상길

  • 파이썬의 비교연산자 중 is와 ==가 있다.
  • 이 둘은 파이썬의 객체 구조와 관련이 깊다.

is

  • id() 값을 비교하는 함수이다.
  • None은 null로서 값 자체가 정의되어 있지 않으므로 ==로 비교불가하다.
if a is None:
    pass

==

  • 값을 비교하는 연산자이다.

예시

a = [1, 2, 3]

a == a          # True
a == list(a)    # True
a is a          # True
a is list(a)    # False

값은 동일하지만 list()로 한 번 더 묶어주면, 별도의 객체로 복사되고 다른 id를 갖게 된다.
따라서 is는 False가 된다.

a = [1, 2, 3]
a == copy.deepcopy(a)   # True
a is copy.deepcopy(a)   # False

copy.deepcopy()로 복사한 결과 또한 값은 같지만 ID는 다르기 때문에, ==로 비교하면 True, is로 비교할 경우 False가 된다.