Python의 문자열 불변성은 일단 생성되면 변경할 수 없음을 의미합니다. 그러나 id() 함수로 표현되는 객체 ID는 문자열에 대해 변경되어 혼란을 초래할 수 있습니다.
일반적으로 문자열의 id()는 동일한 문자열 리터럴에 대해서도 호출될 때마다 변경됩니다. 이는 Python이 기본적으로 모든 문자열의 인턴을 보장하지 않기 때문입니다.
id('so') 140614155123888 id('so') 140614155123848 id('so') 140614155123808
그러나 예외가 있습니다. 다음 기준을 충족하는 문자열은 인터닝되어 동일한 id()를 유지합니다.
문자열 할당 변수는 해당 id() 동작에 영향을 미칠 수 있습니다. 변수가 문자열을 참조하면 Python은 인턴 버전을 사용하여 문자열 값을 메모리에 한 번 저장하여 성능을 최적화합니다.
so = 'so' id('so') # Now references the same interned string as 'so' 140614155123728
Python은 내부적으로 함수를 사용하여 다음을 수행합니다. intern_string_constants()라는 인턴 문자열입니다. 이 함수는 앞서 언급한 기준(예: 예시의 'hello')을 충족하는 문자열에 적용됩니다.
Python의 컴파일러와 옵티마이저도 인터닝에서 중요한 역할을 합니다. 코드 개체 팩토리 함수는 유효한 식별자(예: 두 번째 예에서는 'so')로 표시될 수 있는 모든 문자열을 인턴할 수 있습니다. 또한, 엿보기 또는 AST 최적화 프로그램은 상수가 포함된 간단한 표현식을 접어서 내부 결과로 이어질 수 있습니다.
Python의 문자열은 변경할 수 없지만 해당 id()는 다음과 같은 요소에 따라 변경될 수 있습니다. 인턴, 변수 범위 및 최적화 프로그램 동작. 인턴은 메모리 사용 및 성능을 최적화하는 데 도움이 되며 잠재적인 혼란을 피하기 위해 해당 동작을 이해하는 것이 중요할 수 있습니다.
위 내용은 불변 문자열에 대해 Python의 `id()`가 변경되는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!