정수를 사용하는 "is" 연산자의 예기치 않은 동작
Python의 "is" 연산자는 객체 ID를 비교하여 두 변수가 다음을 참조하는지 테스트합니다. 메모리에 있는 동일한 개체입니다. 그러나 정수를 비교할 때 예기치 않게 동작할 수 있습니다.
Python 2.5.2에서 다음 예를 고려하십시오.
>>> a = 256 >>> b = 256 >>> a is b True # Expected result >>> a = 257 >>> b = 257 >>> a is b False # Unexpected result
정수 257을 비교할 때 "is" 연산자가 False를 반환하는 이유는 무엇입니까?
답은 Python이 내부적으로 작은 정수를 나타내는 방식에 있습니다. Python 문서에 따르면 -5에서 256 사이의 정수는 미리 할당된 배열에 저장됩니다. 이 범위에서 정수를 생성하면 실제로 해당 배열 요소에 대한 참조를 얻습니다.
이는 -5에서 256 사이의 정수에 대해 "is" 연산자가 본질적으로 정수 대신 메모리 주소를 비교한다는 것을 의미합니다. 가치. 위의 예에서 a와 b는 모두 배열의 동일한 요소를 참조하므로 True 결과가 됩니다.
그러나 이 범위를 벗어난 정수의 경우 "is" 연산자는 예상대로 작동합니다. 메모리 주소가 아닌 실제 정수 값을 비교합니다.
정수인지 아닌지에 관계없이 유형을 알 수 없는 두 객체를 비교해야 하는 경우 "id()" 함수를 사용하면 됩니다. 메모리 주소를 비교하고 대신 비교하세요:
>>> a = 257 >>> b = 257 >>> id(a) == id(b) False
위 내용은 Python의 'is' 연산자가 특정 정수에 대해 예기치 않게 동작하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!