> 백엔드 개발 > 파이썬 튜토리얼 > 'is' 연산자가 캐시되지 않은 정수 내부 및 외부 함수와 다르게 동작하는 이유는 무엇입니까?

'is' 연산자가 캐시되지 않은 정수 내부 및 외부 함수와 다르게 동작하는 이유는 무엇입니까?

DDD
풀어 주다: 2024-11-03 16:52:30
원래의
975명이 탐색했습니다.

Why Does the `is` Operator Behave Differently with Non-Cached Integers Inside and Outside Functions?

캐시되지 않은 정수를 사용한 is 연산자의 예기치 않은 동작

질문:

함수 내에서 is 연산자는 반환합니다. [-5, 256] 범위 밖의 두 정수 리터럴을 비교할 때는 참이지만 함수 밖에서 비교하면 거짓입니다. 이러한 불일치가 발생하는 이유는 무엇입니까?

답변:

tl;dr:

Python 인터프리터는 코드 블록을 단위로 실행합니다. . 기능은 단일 블록인 반면 대화형 명령은 별도의 블록입니다. 각 블록에는 정수를 포함한 자체 개체가 포함되어 있습니다. 따라서 함수 내에서 선언된 정수는 동일한 객체를 가리키지만 외부에서 선언된 정수는 그렇지 않습니다.

설명:

  • 함수 :

    • 코드 블록은 함수 내에서 정의됩니다.
    • 블록 내의 리터럴(예: 1000)은 단일 객체로 저장됩니다.
    • 객체 ID를 확인하므로 a와 b가 모두 동일한 객체를 가리키므로 함수 내의 a는 b가 True를 반환합니다.
  • 대화형 명령:

    • 각 명령은 별도의 코드 블록으로 실행됩니다.
    • 각 블록 내의 리터럴은 별도의 개체로 저장됩니다.
    • 는 개체 ID를 확인하고 개체가 리터럴이기 때문에 a는 b와 다르면 False를 반환합니다.

추가 관찰:

  • 이 동작은 정수가 아닌 경우에도 적용됩니다. 리터럴(예: 부동 리터럴).
  • Python은 사전을 사용하여 코드 객체 내에 상수를 저장하고 새 상수를 추가하기 전에 기존 상수를 확인합니다.

주의 사항:

  • 연결된 문: 명령이 연결되면(예: a = b = 1000) 단일 코드 블록으로 해석되어 True로 이어집니다.
  • 모듈 수준 실행: 모듈 수준 실행(예: a = b = 1000)은 단일 코드 블록 내에서 발생하며 결과는 True입니다.
  • 변경 가능한 개체: 불일치는 변경 가능한 객체에는 적용되지 않습니다. a = b = []는 항상 False를 반환합니다.

위 내용은 'is' 연산자가 캐시되지 않은 정수 내부 및 외부 함수와 다르게 동작하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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