Python 2.7에서 문자열 ID의 동작은 혼란스러울 수 있습니다. 문자열은 변경할 수 없지만 ID는 시간이 지남에 따라 변경되는 것 같습니다. 이 문서에서는 이러한 동작의 이유를 살펴봅니다.
Python의 Id Interning
CPython은 기본적으로 모든 문자열을 인턴하지 않습니다. 그러나 특정 기준을 충족하는 문자열은 sys.intern() 함수 또는 PyCode_New 함수의 intern_string_constants() 호출을 사용하여 인턴될 수 있습니다. Internment는 코드베이스에서 동일한 문자열이 여러 번 나타나는 경우 동일한 객체를 사용하도록 보장합니다.
인턴에 적합한 문자열은 다음과 같습니다.
ID 변경
문자열이 인턴 자격을 갖추지 못한 경우 해당 ID는 계속 변경됩니다. 이는 Python이 새 문자열에 대한 메모리 위치를 자유롭게 재사용하여 동일한 리터럴에 대해 다른 ID를 생성할 수 있기 때문입니다.
인터닝 및 문자열 사용
ID의 동작은 다음과 같습니다. 문자열 사용 방법:
문자열 연결
문자열 연결은 ID에도 영향을 미칩니다. 최적화 제한 내에서 연결된 문자열은 내부 문자열로 이어질 수 있으며, 결과적으로 연결된 문자열에 대해 동일한 ID가 됩니다.
결론
Python 2.7에서 변경할 수 없는 문자열의 ID는 다음과 같습니다. 인터닝 메커니즘과 메모리 재사용으로 인해 항상 동일하지는 않습니다. 이러한 요인을 이해하면 문자열 ID의 명백한 불일치를 명확히 하는 데 도움이 됩니다.
위 내용은 Python 2.7에서 불변 문자열 ID가 변경된 것처럼 보이는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!