프로그래밍/PYTHON

python - Equality, Identity

aiemag 2021. 2. 12. 00:22
반응형

python에서 햇갈리기 쉬운 equality와 identity에 대해 정리합니다.

 


Summary

1. True / False를 비교할 때는 if문에 변수만 사용한다.

- boolean에 대한 값은 True인지 False인지 명확하기 때문에 그냥 사용

 

2. Equality를 검증할 때는 == 또는 != 연산자를 사용

- 값이 맞는지만 비교

 

3. Identiy를 검증할 때는 is 또는 is not을 사용

- 객체 자체가 완전히 일치하는지를 비교

 


None의 비교

 

None은 python에서 정의된 NoneType 클래스임

 

None은 값이 아니라 Identity를 비교하기 때문에 ==이 아니라 is를 사용

※ Equality를 비교해도 상관은 없지만 Identity를 비교해야 성능상의 이점이 있음

 

다음은 smaple code 입니다.

None 값을 Equality 와 Identity 방식으로 비교를 하였을 때 어느 정도의 성능 차이가 나는데 보여줍니다.

※ code는 "파이썬답게 코딩하기" 책의 source code를 사용하였습니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#!/usr/bin/python3
 
import timeit
 
def average(items):
    sum = 0
    for item in items:
        sum += float(item)
    
    return sum / len(items)
 
 
def check_performance(compare_expression, condition):
    results = timeit.Timer(compare_expression, setup=condition).repeat(10010000)
    return average(results)
 
 
def main():
    print("compare x is not None")
    print("equality : %s" % check_performance("x == None""x = 1"))
    print("identity : %s" % check_performance("x is None""x = 1"))
 
    print("compare x is None")
    print("equality : %s" % check_performance("x == None""x = None"))
    print("identity : %s" % check_performance("x is None""x = None"))
 
 
if __name__ == "__main__":
    main()
cs

 

실행 결과를 보면, x 값이 None이거나, 아니거나 상관없이 identity 방식으로 비교하는 것이 더 빠름을 보여줍니다.

 

 

반응형