본문 바로가기

컴퓨터/파이썬 알고리즘 인터뷰

3. is와 ==

 

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

 

주의할 점:

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

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

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

a = [1,2,3]
print(a == list(a))
>> True

print(a is list(a))
>> False

 

2020.08.31 추가:

 

파이썬에선 ==을 등가성(equality) 비교, is를 동일성(identitiy) 비교라 한다.

등가성 비교는 값이 같다면 True를 반환하지만, 동일성 비교는 값은 물론 객체의 식별 번호(id)까지 같아야 한다.

 

예전 Python에선 'python integar caching' 이라고 해서 -5부터 256 까지의 정수는 자주 쓰이기 때문에 사용자가 할당하지 않아도 할당되어 있었다.

a = 1
if a is 1:
    print("성공!")
>>> 성공!

지금 Python은 확인 결과 257 이상의 정수에서도 작동하기 때문에 상관없긴 하다.

단, 이러한 문제가 발생할 수 있다는 여지가 남아 있기 때문에 

 

if a is 1:

이러한 방식보단,

if a == 1:

을 지향하도록 하자.

'컴퓨터 > 파이썬 알고리즘 인터뷰' 카테고리의 다른 글

6. 문자열 슬라이싱  (0) 2020.08.25
5. Palindrome  (0) 2020.08.25
4. defaultdict 객체  (0) 2020.08.25
2. pass  (0) 2020.08.24
1. print()  (0) 2020.08.24