Python ==, != 자료형별 기준 및 클래스 내 구현 예제
파이썬에서 숫자형, 문자열, 리스트 및 딕셔너리 등 여러 자료형의
비교 연산자에서 같음이 성립하는 기준을 정리해보고,
직접 구현된 클래스 객체 간의 비교 연산자 결과를 구현해보는 예제를 다루어보도록 하겠습니다.
자료형별 '같다'의 기준(== 결과 True) 예제
1. 정수형
a = 1
b = 1
c = 2
print(a == b) # True
print(a == c) # False
정수형의 경우 같은 숫자라면 True, 다른 숫자라면 False가 반환됩니다.
2. 실수형
a = 0.1
b = 0.10000000000000
c = 0.10000000000001
print(a == b) # True
print(a == c) # False
실수형의 경우도 정수형과 마찬가지로 같은 숫자의 경우 True가 반환되는데,
부동소수점의 미세한 결과 차이만 달라도 False가 반환되므로 유의하셔야 합니다.
또한, 정수형 1과 실수형 1.0은 파이썬에서는 같은 수로 인식합니다.
3. 문자열
a = "abc"
b = "abc"
c = "abc "
print(a == b) # True
print(a == c) # False
모든 위치의 문자가 전부 일치한다면 같은 문자열, 단 1글자라도 다르다면
다른 문자열로 인식합니다.(공백 추가 여부 등도 전부 포함)
또한, 정수형 3과 문자열 '3'은 자료형부터 다르기에 다른 객체로 취급됩니다.
4. 리스트
a = [1, 2, 3]
b = [1, 2, 3]
c = [1, 2, 4]
print(a == b) # True
print(a == c) # False
문자열에서의 원리와 마찬가지로 모든 위치의 값이 전부 일치한다면 같은 리스트,
단 1개의 값이라도 다르다면 다른 리스트로 인식합니다.
5. 딕셔너리
a = {"a" : 3, "b" : 5}
b = {"b" : 5, "a" : 3}
c = {"a" : 3, "b" : 7}
print(a == b) # True
print(a == c) # False
딕셔너리는 순서가 없는 자료형이므로 key, value가 저장된 순서는 상관이 없고
key-value pair의 구성이 전부 일치하면 같은 딕셔너리로 취급합니다.
(단, 한 군데라도 key-value pair의 구성이 다르다면 다른 객체로 다룹니다.)
클래스에서 ==, != 결과 구현(__eq__, __ne__)
직접 구현한 클래스 간의 비교를 진행하고 싶다면
== 결과는 __eq__ 매직 메소드로, != 결과는 __ne__ 매직 메소드로 구현해주시면 됩니다.
아래는 a1, a2라는 두 개의 속성을 가지는 클래스를 구현한 예시이며,
a1 값만 비교하여 해당 값이 같다면 같은 객체로 구분하도록 구현한 경우입니다.
(a2 값은 비교 연산자의 결과에 반영하지 않게 만들었다는 점을 참고하세요.)
class My_class:
def __init__(self, a1, a2): # a1, a2 두 개의 속성을 가지는 클래스
self.a1 = a1
self.a2 = a2
# a1 값만 비교하도록 비교 연산 진행
def __eq__(self, other): # == 연산 결과 정의
if self.a1 == other.a1: return True
else: return False
def __ne__(self, other): # != 연산 결과 정의
return not self.__eq__(other) # == 결과의 반대값 반환
실제로 해당 클래스 객체를 몇 개 선언하여 비교 연산을 진행해본 결과는 아래와 같습니다.
class1 = My_class(a1 = 5, a2 = 3)
class2 = My_class(a1 = 5, a2 = 7)
class3 = My_class(a1 = 3, a2 = 3)
# class1, class2 객체는 a1 값이 같아서 == 결과 성립
print(class1 == class2) # True
print(class1 != class2) # False
# class1, class3 객체는 a1 값이 달라서 != 결과 성립
print(class1 == class3) # False
print(class1 != class3) # True
'Python > 파이썬 기초' 카테고리의 다른 글
파이썬 pop의 시간 복잡도에 대한 고찰(맨 뒤, 중간, 맨 앞 위치 비교 및 remove/del과의 비교) (0) | 2022.08.05 |
---|---|
파이썬 로또 번호 추출, 당첨 등수 구하기 및 구매 시뮬레이션 구현 예제 (0) | 2022.07.07 |
파이썬 2차원 배열 선언, 값 추출/변경, 정렬(feat. 리스트, 넘파이 배열) (2) | 2022.05.21 |