정수에 대한 '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 중국어 웹사이트의 기타 관련 기사를 참조하세요!