두 번째 테스트 역시 참을 반환한다. 두 문자열이 같은 내용이라면 두 값은 동일하다고 판단된다. 메모리상에 똑같은 데이터를 참조할 필요가 없다는 의미다.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’로 변환해 준다.