> 백엔드 개발 > 파이썬 튜토리얼 > 불변 문자열에 대해 Python의 `id()`가 변경되는 이유는 무엇입니까?

불변 문자열에 대해 Python의 `id()`가 변경되는 이유는 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2024-12-02 02:23:11
원래의
965명이 탐색했습니다.

Why Does Python's `id()` Change for Immutable Strings?

Python 문자열의 가변성과 객체 동일성

Python의 문자열 불변성은 일단 생성되면 변경할 수 없음을 의미합니다. 그러나 id() 함수로 표현되는 객체 ID는 문자열에 대해 변경되어 혼란을 초래할 수 있습니다.

id() 문자열에 대한 동작

일반적으로 문자열의 id()는 동일한 문자열 리터럴에 대해서도 호출될 때마다 변경됩니다. 이는 Python이 기본적으로 모든 문자열의 인턴을 보장하지 않기 때문입니다.

id('so')
140614155123888
id('so')
140614155123848
id('so')
140614155123808
로그인 후 복사

그러나 예외가 있습니다. 다음 기준을 충족하는 문자열은 인터닝되어 동일한 id()를 유지합니다.

  • 코드 객체에 저장된 상수
  • ASCII 문자, 숫자 또는 밑줄만 포함하는 문자열

가변 범위 및 인턴

문자열 할당 변수는 해당 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿