동일성 대 평등: 비교 난제 풀기
프로그래밍 영역에서 데이터 비교는 필수적인 작업이 될 수 있습니다. 그러나 문자열의 경우 프로그래머는 비교를 위해 '==' 또는 'is' 연산자를 사용할 때 예상치 못한 결과에 직면하는 경우가 많습니다. 이 수수께끼 같은 현상을 자세히 알아보고 s1 == s2와 s1의 출력이 s2인 이유를 살펴보겠습니다.
딜레마
다음 Python 코드를 고려해 보세요.
s1 = 'text' s2 = 'text'
직관적으로 s1 == s2와 s1은 s2이므로 두 변수 모두 동일한 문자열 값이 할당되므로 True를 반환합니다. 그러나 s1 == s2는 동등함을 나타내는 True를 지속적으로 반환하지만 s1 is s2는 경우에 따라 놀랍게도 False를 반환합니다.
진실 밝히기
이 동작을 이해하려면, 신원 테스트('is'로 수행)와 동등성 테스트('=='로 수행)를 구별하는 것이 중요합니다. 동일성 테스트는 두 변수가 메모리에서 정확히 동일한 객체를 참조하는지 여부를 확인하고, 동일성 테스트는 해당 값이 동일한지 확인합니다.
Python 인터프리터에서는 다음과 같이 동일한 문자열 값을 여러 변수에 할당합니다. 위의 예에서 Python은 문자열 값을 메모리의 단일 위치에 저장하고 모든 변수를 해당 위치에 연결하여 공간을 최적화합니다. 이는 s1과 s2가 동일한 객체를 참조하므로 값이 동일하다는 것을 의미합니다.
그러나 Python은 특정 공통 문자열 값이 공유 풀에 저장되는 인터닝이라는 메커니즘도 구현합니다. 인턴된 값이 있는 새 문자열이 생성되면 Python은 새 메모리 위치를 할당하기 전에 해당 값이 풀에 이미 존재하는지 확인합니다. 그렇다면 기존 위치가 사용되므로 여러 문자열 변수가 동일한 메모리 위치를 효과적으로 가리킬 수 있습니다.
인턴의 역할
' text'는 인턴된 문자열 값입니다. 즉, s1과 s2가 모두 메모리에서 동일한 인턴된 값을 참조함을 의미합니다. 결과적으로 s1 == s2는 True를 반환하여 값이 동일함을 확인합니다.
그러나 s1이 s2인 이유는 때때로 False를 반환하는 이유는 Python이 할당을 처리하는 방식에 있습니다. 인턴되지 않은 문자열 값을 변수에 할당하면 해당 문자열에 대해 새 메모리 위치가 할당됩니다. 이는 동일한 값을 가지고 있음에도 불구하고 두 변수가 더 이상 메모리에서 동일한 개체를 참조하지 않음을 의미합니다. 따라서 s1은 s2가 False로 평가되어 동일한 객체가 아님을 나타냅니다.
In Essence
'==' 또는 'is'를 사용하여 문자열을 비교할 때 왜 다른 결과가 나올 수 있는지 이해하려면 신원 테스트와 동등성 테스트의 차이점을 파악하는 것이 기본입니다. s1 == s2는 문자열 값의 동일성을 비교하는 반면, s1은 s2는 변수가 메모리에서 참조하는 객체의 동일성을 비교합니다.
위 내용은 Python에서 문자열을 비교할 때 `s1 == s2`와 `s1 is s2`가 때때로 다른 결과를 반환하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!