우선, 우리는이의 다음 섹션 참조 코드를 :
- >>> NUM1, NUM2 = 1,1
- >>> 인쇄 NUM1은 입니다 NUM2
- 참된
- >>> ID (NUM1) ID (NUM2)
- (3,965,416, 3,965,416)
- >>> num3, num4 = 1.0, 1.0
- >>> 인쇄 num3은 입니다 num4
- 그릇된
- >>> ID (num3) ID (num4)
- (22416168, 22416184) </ SPAN>
우리는 볼 수 NUM1 및 NUM2의 값은 1 , 그 메모리 어드레스가 동일하며 num3 및 num4 값 또한 1.0 만, 그 메모리 어드레스는 다르다. 이유는 무엇입니까?
에서 파이썬 , 문자열과 정수 객체는 불변 ( 불변 ) 형, 따라서 파이썬은 그들에게 매우 효율적인 캐시에게있을 것입니다 . 이러한 처리는 메커니즘 향상시킬 수 있습니다 파이썬 성능을. 따라서, 우리는 아래의 예를 참조 STR1 및 STR2을 동일한 메모리 어드레스를 가리키는 :
- >>> STR1, STR2 = 'A', 'A'
- >>> 인쇄 str1과는 이다 STR2
- 참된
- >>> ID (STR1) ID (STR2)
- (22171104, 22171104) </ SPAN>
음, 모든 정수와 문자열이 아닌 파이썬은 우리가 그것을 버퍼 도움이 될 것입니다? 대답은 없습니다 . 우리가 배울 수있는 시간이 영어의 모든 단어지만, 고주파 단어 만 선택 번호를 기억 할 필요가 없습니다. 파이썬은 또한 전략을 채택한다. 우리는 아래의 예에서 볼 수있는, 모든 정수와 문자열을 파이썬이 우리에게 캐시 도움이 될 것입니다 :
- >>> num5, num6 = 300, 300
- >>> 인쇄 num5은 입니다 num6
- 그릇된
- >>> ID (num5) ID (num6)
- (24972028, 24971416) </ SPAN>
- >>> STR3, STR4 = 'ABC', 'ABC'
- >>> 인쇄 STR3은 입니다 STR4
- 그릇된
- >>> ID (STR3) ID (STR4)
- (29674688, 29674656) </ SPAN>
파이썬은 얼마나 많은 캐시를 우리에게 도움이 될 수 있는가? Python2.3 간단한 정수 버퍼 영역 (1100)은 , Python2.5.4 간단한 정수 적어도 캐시 이후 범위 (-5,256) . 모든 짧은 문자는 완충 지대도 있습니다.
간단한 정수 및 단일 문자를 캐시 할 수 있기 때문에, 튜플 (의 불변의 유형과 동일한 튜플 ) 또한 그것을 캐시 할 수 있습니까? 우리의 다음 세트가 계속 테스트를 :
1. >>> tuple1, tuple2 = (1), (1)은 2. >>> 인쇄 tuple1는 tuple2이다 3.False 4. >>> ID (tuple1) ID (tuple2) 5. (24899856, 24756080 ) 6. >>> tuple3, tuple4 = (1,2), (1,2) 7. >>> 인쇄 tuple3는 tuple4이다 8.False 9. >>> ID (tuple3) ID (tuple4) (10) ( 29705880, 24881752) </ SPAN>
( 추신 : tuple1 및 tuple2 문으로 정의 할 경우 (1) 상기 인해 파이썬 기호 () 괄호에 의해 패킷 연산자 오버로딩 단지 튜플, () 첫 번째 단일 소자 패키지 대신 튜플, 그룹화 조작으로 간주)
우리는 튜플 메커니즘을 캐싱 보여 주었다 보지 못했다. 이유는 무엇입니까? 메커니즘을 캐싱하는 것은 문제 빠른 데이터 액세스를 해결하기 때문에, 간단한 정수 변수 및 단일 문자를 더 자주 사용됩니다,하지만 일반적인 튜플 튜플 말, 캐싱 메커니즘도 합리적입니다있다.
물론,이 현상을 더 잘 이해하기 위해, 우리는 더 많은 것을 배우고 배울 필요가 파이썬에게 캐싱 메커니즘을.