더북(TheBook)

두 번째 테스트 역시 참을 반환한다. 두 문자열이 같은 내용이라면 두 값은 동일하다고 판단된다. 메모리상에 똑같은 데이터를 참조할 필요가 없다는 의미다.2

파이썬의 문자열 연산자를 사용하여 비교하는 모든 기능은 대·소문자를 구분(case-sensitive)한다. 필요하다면 대·소문자를 구분하지 않고 두 피연산자들을 (문자열 메서드인 upper 혹은 lower를 사용하여) 모두 대문자나 소문자로 변경해서 비교할 수도 있는데, 아스키 문자만으로 구성된 문자열이라면 잘 동작한다.

반면 광범위한 유니코드 문자로 이루어진 문자열을 사용하고 있다면 casefold 메서드를 사용하여 대·소문자를 구분하지 않고 값을 비교하는 것이 더 안전하다.3

def compare_no_case(str1, str2):
    return str1.casefold() == str2.casefold()

print(compare_no_case('cat', 'CAT'))     # 참!

표 2-1은 str 타입에서 사용할 수 있는 연산자 리스트다.

 

 


2 역주 '멍멍이' 문자열은 dog1_str과 값은 같지만, 서로 다른 객체다. 하지만 '=='로 테스트하는 경우 참을 반환한다는 것을 설명하고 있다.

3 역주 casefold는 소문자로 변경하는 것과 비슷하지만, 유니코드가 아닌 문자도 변환해 준다. 가령 독일어 소문자 글자인 'ß'는 ‘ss’와 동일한데, lower 메서드를 사용하면 아무 변환 작업도 수행되지 않는 반면 casefold는 ‘ss’로 변환해 준다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.