Python의 \'is\' 연산자가 다른 코드 블록에서 큰 정수와 다르게 동작하는 이유는 무엇입니까?
큰 정수를 사용한 Python의 "is" 연산자 동작
문제
Python에서 is 연산자는 동등성보다는 객체 ID를 확인합니다. 그러나 특정 시나리오에서는 아래에 설명된 것처럼 이 동작이 예상치 못한 것일 수 있습니다.
<code class="python">def func(): a = 1000 b = 1000 return a is b a = 1000 b = 1000 print(a is b, func()) # (False, True)</code>
is 비교는 함수 내에서는 True를 반환하지만 함수 외부에서는 False를 반환합니다. 다른 평가 결과에도 불구하고 정수 a와 b는 동일한 값을 갖는 것처럼 보입니다.
설명
이 동작을 이해하려면 Python 인터프리터의 코드 블록 해석이 중요합니다. Python 참조 매뉴얼에 따르면 대화형으로 실행되는 각 명령은 별도의 코드 블록을 구성합니다. 다음은 블록으로 간주됩니다:
- 모듈
- 함수 본문
- 클래스 정의
단일 코드 블록 내에서 Python은 특정 항목을 캐시합니다. 작은 정수([-5, 256] 범위 내)와 같은 객체. 여러 변수가 동일한 정수 리터럴을 참조하는 경우 모두 동일한 캐시된 정수 개체를 참조합니다. 그러나 리터럴이 다른 코드 블록에서 선언되면 고유한 정수 개체가 생성됩니다.
다른 코드 개체, 다른 ID
이를 설명하려면 각 사례에 대한 코드 개체를 고려하세요.
- 함수 func: a와 b는 동일한 정수 객체를 참조합니다(1000이 캐시된 정수 범위 내에 있으므로 Python에서 캐시함).
- 대화형 명령: a와 b는 별도의 코드 블록에 정의되어 있기 때문에 서로 다른 정수 개체를 참조합니다.
결과적으로 a is b는 func 블록 내에서 True로 평가됩니다. 여기서 모든 정수는 별도의 개체가 생성되는 블록 외부에서는 False입니다.
주의 사항
다음 주의 사항에 유의하세요.
- 한 줄 내에서 할당 문을 연결하면 결과가 발생할 수 있습니다. 진정한 신원 확인.
- 모듈 수준 실행은 모듈의 단일 코드 블록으로 인해 True를 반환합니다.
- 변경 가능한 객체와 관련된 테스트는 캐시되지 않기 때문에 항상 False를 반환합니다.
결론
신원 비교와 관련된 예상치 못한 동작을 해석하려면 Python의 코드 블록 개념을 이해하는 것이 필수적입니다. 불변 객체의 신원을 확인하는 데 유용하지만 캐싱에 의존하지 않으므로 값을 비교할 때 등호 연산자(==)를 사용하는 것이 좋습니다.
위 내용은 Python의 \'is\' 연산자가 다른 코드 블록에서 큰 정수와 다르게 동작하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











Tensorflow 또는 Pytorch로 딥 러닝을 수행하는 방법은 무엇입니까?
