python 문자열 Intern 메커니즘 상세 설명
코드 먼저 보기:
>>> s3 = "hello!"
>>> s4 = "hello!"
>>> s3 is s4
False
>>> id(s3)
80325968L
>>> id(s4)
80326048L
s3 와 s4 는 값 이 같 지만 확실히 두 개의 서로 다른 문자열 대상 이다.Python 은 그들 두 사람 에 게 각각 메모리 공간 을 분배 할 것 이다.프로그램 에 대량의 값 이 같은 문자열 이 존재 한다 고 가정 하면 시스템 은 모든 문자열 에 메모리 공간 을 중복 적 으로 분배 해 야 한다.분명히 시스템 에 있어 불필요 한 자원 낭비 이다.이런 문 제 를 해결 하기 위해 Python 은 intern 체 제 를 도입 했다.다시 보기:
>>> s3 = intern('hello!')
>>> s4 = intern('hello!')
>>> s3 is s4
True
>>> id(s3)
80325968L
>>> id(s4)
80325968L
intern 은 Python 의 내장 함수 입 니 다.이 함수 의 역할 은 문자열 을 intern 체제 로 처리 하고 처리 한 후에 문자열 대상 을 되 돌려 주 는 것 입 니 다.값 이 같은 문자열 이 intern 메커니즘 을 통 해 처 리 된 후에 돌아 오 는 것 은 모두 같은 문자열 대상 이라는 것 을 알 게 되 었 습 니 다.이런 방식 은 빅 데 이 터 를 처리 할 때 더 많은 메모리 공간 을 절약 할 수 있 습 니 다.시스템 은 같은 문자열 에 메모 리 를 중복 분배 하지 않 아 도 됩 니 다.값 이 같은 문자열 에 대해 하나의 대상 을 공유 하면 됩 니 다.사실은 Intern 체 제 를 실현 하 는 방식 은 매우 간단 합 니 다.바로 문자열 저장 탱크 를 유지 하 는 것 입 니 다.이 연못 은 사전 구조 입 니 다.만약 에 문자열 이 연못 에 존재 하면 새로운 문자열 을 만 들 지 않 고 이전에 만 든 문자열 대상 으로 돌아 갑 니 다.만약 에 이전에 이 연못 에 가입 하지 않 았 다 면 먼저 문자열 대상 을 구성 합 니 다.그리고 이 대상 을 연못 에 넣 으 면 다음 에 쉽게 얻 을 수 있 습 니 다.위조 코드 로 설명 할 수 있 습 니 다.
intern_pool = {}
def intern(s):
if s in intern_pool:
return intern_pool[s]
else:
obj = PyStringObject(s)
intern_pool[s] = obj
return obj
주류 대상 을 대상 으로 하 는 프로 그래 밍 언어 에서 intern 체 제 는 문자열 을 처리 하 는 것 에 대해 이미 하나의 표지 가 되 었 다.intern 체 제 를 통 해 문자열 의 처리 효율 을 높 일 수 있다.물론 해석 기 내부 에서 intern 체제 의 사용 전략 에 대해 연구 하고 일부 장면 은 자동 으로 intern 을 사용 할 수 있 으 며 일부 부분 은 수 동 방식 을 통 해 시작 해 야 한다.예 를 들 면:
>>> s1 = "hello"
>>> s2 = "hello"
>>> s1 is s2
True
>>> id(s1)
72320704L
>>> id(s2)
72320704L
이 코드 는 Python 이 자동 으로 intern 메커니즘 을 사용 한 결과 입 니 다.이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로마 숫자를 정수로 또는 그 반대로 변환그 중 하나는 로마 숫자를 정수로 변환하는 함수를 만드는 것이었고 두 번째는 그 반대를 수행하는 함수를 만드는 것이었습니다. 문자만 포함합니다'I', 'V', 'X', 'L', 'C', 'D', 'M' ; 문자열이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.