>백엔드 개발 >파이썬 튜토리얼 >Python의 'is' 연산자가 작은 정수와 큰 정수에 대해 다르게 동작하는 이유는 무엇입니까?

Python의 'is' 연산자가 작은 정수와 큰 정수에 대해 다르게 동작하는 이유는 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-12-24 04:56:14543검색

Why Does Python's `is` Operator Behave Differently with Small and Large Integers?

정수에 대한 'is' 연산자의 수수께끼 동작

Python에서 'is' 연산자는 두 객체가 동일한 객체를 참조하는지 확인합니다. 기억 속에. 이는 일반적으로 예상대로 작동하지만 정수의 경우 예상치 못한 동작을 보여 개발자들 사이에 혼란을 야기합니다.

대형 정수의 예상치 못한 결과

다음 코드를 고려하세요.

a = 256
b = 256
a is b  # True (expected)
a = 257
b = 257
a is b  # False (unexpected)

두 번째 비교에서 'is' 연산자가 False를 반환하는 이유는 무엇인가요? 257은 257이 아닌가요?

CPython 구현 세부 사항

이상한 동작은 가장 일반적인 Python 인터프리터인 CPython의 미묘한 구현 세부 사항에서 비롯됩니다. -5에서 256 사이의 정수의 경우 CPython은 정수 객체의 배열을 유지합니다. 이 범위에서 정수를 생성하면 배열의 기존 객체에 대한 참조를 얻을 수 있습니다. 이는 이 범위 내의 작은 정수에 대해 'is' 연산자가 배열의 동일한 객체를 참조하는지 확인한다는 것을 의미합니다.

결과 및 의미

위의 예에서 a와 b에 256을 할당하면 배열에서 동일한 객체를 받습니다. 따라서 'a is b'는 True로 평가됩니다. 그러나 a와 b에 257을 할당하면 동일하지 않은 두 개의 새 객체가 생성되어 'a is b'가 False를 반환하게 됩니다.

대체 비교 방법

유형에 관계없이 임의의 두 개체가 동일한지 비교하려면 'is' 대신 '==' 연산자를 사용할 수 있습니다. 이렇게 하면 개체의 ID보다는 개체의 값이 확인됩니다.

a = 257
b = 257
a == b  # True

'is' 연산자는 두 개체가 메모리에서 정확히 동일한 개체를 참조하는지 확인해야 하는 경우에만 사용해야 한다는 점을 기억하세요. 값을 비교할 때는 '=='를 사용해야 합니다.

위 내용은 Python의 'is' 연산자가 작은 정수와 큰 정수에 대해 다르게 동작하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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