Python에서 is 와 == 의 차이

Python에서 is 와 == 의 차이

2줄 요약

is 는 레퍼런스 체크

== 는 값 체크

내용

Python에서 무언가를 비교할 때 is를 많이 쓰고 했다.

is== 모두 값을 비교한다는 것만 알고 이 둘을 별로 구분없이 사용했다.(하지만 아니었다.)

1
2
3
4
5
>>> a = 1
>>> a is 1
True
>>> a == 1
True

여기까지는 당연하다

1
2
3
4
5
>>> a = 257
>>> a is 257
False
>>> a == 257
True

a is 257False를 반환하는 반면 a == 257True를 반환한다.

이것은 is는 레퍼런스를 비교하고 ==는 값을 비교하기 때문이다.

1
2
3
4
>>> id(a)
140316191538784
>>> id(257)
140316191538808

이와 같이 서로 다른 메모리 주소 값을 가지고 있기 때문에 위와 같은 결과가 나오게 된다.

1
2
3
4
5
>>> a = 1
>>> id(a)
140316194656296
>>> id(1)
140316194656296

a = 1을 하게 되면 메모리 주소가 같기 때문에 True를 반환한 것!

하지만 이는 Python Interpreter에서 [-5, 256] 범위의 Integer를 미리 캐싱(?)하고 있기 때문에 발생하는 일이다.

1
2
3
4
5
6
>>> def test():
... a = 257
... print a is 257
...
>>> test()
True

저렇게 컴파일 된 함수(?)안에서는 똑같은 메모리를 바라보게 되어 비교해보면 True를 반환한다

새롭고 신기한 Python의 세계

# Python

댓글

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×