>백엔드 개발 >파이썬 튜토리얼 >컴파일 타임이나 런타임에 Python 인턴 문자열이 사용되며 이것이 비교에 어떤 영향을 미칩니까?

컴파일 타임이나 런타임에 Python 인턴 문자열이 사용되며 이것이 비교에 어떤 영향을 미칩니까?

Linda Hamilton
Linda Hamilton원래의
2024-12-14 02:03:10669검색

Does Python Intern Strings at Compile Time or Run Time, and How Does This Affect Comparisons?

Python 문자열 인터닝 이해

문자열 인터닝은 동일한 내용을 가진 여러 문자열이 메모리에서 동일한 객체를 공유하는 메커니즘입니다. Python은 문자열 인터닝을 사용하여 문자열 처리를 최적화하고 메모리 사용량을 줄입니다.

컴파일 시간 문자열 인터닝

처음 두 예는 컴파일 시간 문자열 인터닝을 보여줍니다. 두 문자열("string" 및 "strin" "g")은 모두 평가되어 컴파일 타임에 동일한 불변 문자열 개체로 변환됩니다. 이로 인해 두 문자열이 동등해지고 동일한 메모리 주소를 차지하게 됩니다.

런타임 문자열 평가

그러나 세 번째 예에는 런타임 문자열 연결이 포함됩니다. . 컴파일 타임 연결과 달리 이 작업의 결과는 자동으로 인터닝되지 않습니다. 따라서 "s1 "g"와 "string"은 서로 다른 메모리 주소를 차지하므로 비교 결과 "s1 "g"는 "string"이며 False를 반환합니다.

문자열 인터닝 제어

sys.intern()을 사용하여 문자열을 수동으로 인턴할 수 있습니다. 이렇게 하면 전달하는 문자열 리터럴이 기존 문자열 값(존재하는 경우)과 동일한 개체인지 확인할 수 있습니다.

구현 세부 정보

문자열 인터닝 동작은 다음에 따라 달라집니다. 특정 Python 구현. CPython(가장 일반적인 Python 구현)은 컴파일 타임 상수를 인턴하지만 런타임 표현식의 결과는 인턴하지 않습니다. 이 설명은 CPython 3.9.0 이상 버전에 적용됩니다.

참고: Python 3.9에서는 문자열 리터럴과 함께 "is"를 사용하여 동일한지 비교하는 경우 경고를 표시합니다. 대신 이 목적으로 "=="를 사용하세요.

위 내용은 컴파일 타임이나 런타임에 Python 인턴 문자열이 사용되며 이것이 비교에 어떤 영향을 미칩니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.