파이썬에서 숫자 비교를 위해“is”또는“==”를 사용하는 것이 더 낫습니까?
"is"연산자 또는 "=="연산자를 사용하여 Python에서 두 숫자를 비교하는 것이 더 낫습니까?
예 :
>>> a = 1
>>> a is 1
True
>>> a == 1
True
>>> a is 0
False
>>> a == 0
False
사용 ==
.
때로는 일부 Python 구현에서 우연히 -5에서 256까지의 정수가 작동합니다 is
(예를 들어 CPython 구현에서). 그러나 이것에 의존하거나 실제 프로그램에서 사용하지 마십시오.
다른 사람들이 귀하의 질문에 답변했지만 조금 더 자세히 설명하겠습니다.
파이썬 is
은 신원을 비교합니다. "이것이 실제로 다른 것과 같은 객체인가"라는 질문을 던집니다 ( ==
자바에서 와 유사 ). 따라서 사용 is
이 의미가있는 경우가 있습니다. 가장 일반적인 경우는 None
. 예 : foo is None
. 그러나 일반적으로 원하는 것은 아닙니다.
==
반면에는 "이것이 논리적으로 다른 것과 동일한가"라는 질문을합니다. 예를 들면 :
>>> [1, 2, 3] == [1, 2, 3]
True
>>> [1, 2, 3] is [1, 2, 3]
False
클래스가 동등성을 테스트하는 데 사용하는 방법을 정의 할 수 있기 때문에 이것은 사실입니다.
>>> class AlwaysEqual(object):
... def __eq__(self, other):
... return True
...
>>> always_equal = AlwaysEqual()
>>> always_equal == 42
True
>>> always_equal == None
True
그러나 그들은 ID 테스트에 사용되는 방법을 정의 할 수 없습니다 (즉, 재정의 할 수 없음 is
).
>>> a = 255556
>>> a == 255556
True
>>> a is 255556
False
나는 그것이 대답해야한다고 생각한다 ;-)
그 이유는 부울 True 및 False와 같이 자주 사용되는 일부 개체, 모든 1 글자 문자열 및 짧은 숫자가 인터프리터에 의해 한 번 할당되고 해당 개체를 포함하는 각 변수가이를 참조하기 때문입니다. 다른 숫자와 더 큰 문자열은 요청시 할당됩니다. 예를 들어 255556은 다른 개체가 생성 될 때마다 세 번 할당됩니다. 따라서에 따르면 is
그들은 동일 하지 않습니다 .
그것은 작은 숫자에 대해서만 작동하며 구현에 의존적이라고 생각합니다. Python은 작은 숫자 (iirc <256)에 대해 동일한 객체 인스턴스를 사용하지만 더 큰 숫자에 대해서는 변경됩니다.
>>> a = 2104214124
>>> b = 2104214124
>>> a == b
True
>>> a is b
False
따라서 항상 ==
숫자를 비교 하는 데 사용해야 합니다.
== 당신이 원하는 것입니다, "is"는 당신의 예제에서 작동합니다.
>>> 2 == 2.0
True
>>> 2 is 2.0
False
== 사용
ReferenceURL : https://stackoverflow.com/questions/2239737/is-it-better-to-use-is-or-for-number-comparison-in-python
'programing' 카테고리의 다른 글
void main과 int main의 차이점은 무엇입니까? (0) | 2021.01.17 |
---|---|
소켓 수락- "열린 파일이 너무 많습니다" (0) | 2021.01.17 |
document.all 대 document.getElementById (0) | 2021.01.17 |
jQuery UI 대화 상자 버튼 아이콘 (0) | 2021.01.17 |
문자열에는 몇 바이트가 있습니까? (0) | 2021.01.17 |