programing

파이썬에서 숫자 비교를 위해“is”또는“==”를 사용하는 것이 더 낫습니까?

copyandpastes 2021. 1. 17. 12:31
반응형

파이썬에서 숫자 비교를 위해“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

반응형