"=="와 "is"는 모두 Python (Python의 운영자 페이지에 링크). 초보자의 경우 "a == b"를 "a는 b와 같음", "a는 b"로 해석하고 "a는 b"로 해석 할 수 있습니다. 아마도 이것이 초보자들이 파이썬에서 "=="와 "is"를 혼동하는 이유 일 것입니다.
심층 토론을하기 전에 먼저“==”와“is”를 사용하는 몇 가지 예를 보여 드리고자합니다.
>>> a = 5
>>> b = 5
>>> a == b
True
>>> a is b
True
간단 하죠?a == b
과a는 b
둘 다 반환진실
. 그런 다음 다음 예제로 이동하십시오.
>>> a = 1000
>>> b = 1000
>>> a == b
True
>>> a is b
False
뭐야?!? 첫 번째 예제에서 두 번째 예제로의 유일한 변경은 a와 b의 값이 5에서 1000까지입니다. 그러나 결과는 이미 "=="와 "is"사이에서 다릅니다. 다음으로 이동하십시오.
>>> a = []
>>> b = []
>>> a == b
True
>>> a is b
False
당신의 마음이 여전히 날아 가지 않은 경우 마지막 예가 있습니다.
>>> a = 1000
>>> b = 1000
>>> a == b
True
>>> a is b
False
>>> a = b
>>> a == b
True
>>> a is b
True
"=="에 대한 공식적인 연산은 평등이고 "is"에 대한 연산은 동일성입니다. 두 개체의 값을 비교하려면 "=="를 사용합니다. "a == b"는 "a의 값이 b의 값과 같은지 여부"로 해석되어야합니다. 위의 모든 예에서 a의 값은 항상 b의 값과 같습니다 (빈 목록 예의 경우에도). 따라서“a == b”는 항상 참입니다.
정체성을 설명하기 전에 먼저신분증
함수. 다음을 사용하여 개체의 ID를 얻을 수 있습니다.신분증
함수. 이 아이덴티티는 시간 내내이 객체에 대해 고유하고 일정합니다. 이것을이 객체의 주소로 생각할 수 있습니다. 두 개체의 ID가 동일한 경우 해당 값도 동일해야합니다.
>>> id(a)
2047616
연산자 "is"는 두 개체의 ID가 동일한 지 여부를 비교하는 것입니다. “a is b”는“a의 정체는 b의 정체와 같다”는 의미입니다.
"=="및 "is"의 실제 의미를 알고 나면 위의 예를 자세히 살펴볼 수 있습니다.
첫 번째는 첫 번째와 두 번째 예의 다른 결과입니다. 다른 결과를 보여주는 이유는 파이썬이 각 정수에 대해 고정 된 ID로 -5에서 256까지의 정수 배열 목록을 저장하기 때문입니다. 이 범위 내의 정수 변수를 할당하면 Python은이 변수의 ID를 배열 목록 내의 정수에 대한 ID로 할당합니다. 결과적으로 첫 번째 예에서 a와 b의 ID는 모두 배열 목록에서 가져 오므로 해당 ID는 물론 동일하므로a는 b
사실이다.
>>> a = 5
>>> id(a)
1450375152
>>> b = 5
>>> id(b)
1450375152
그러나 일단이 변수의 값이이 범위를 벗어나면 내부 파이썬에는 그 값을 가진 객체가 없기 때문에 파이썬은이 변수에 대한 새로운 ID를 만들고이 변수에 값을 할당합니다. 이전에 말했듯이 ID는 각 생성에 대해 고유하므로 두 변수의 값이 동일하더라도 ID는 동일하지 않습니다. 그래서a는 b
두 번째 예에서는 False입니다.
>>> a = 1000
>>> id(a)
12728608
>>> b = 1000
>>> id(b)
13620208
(추가 : 두 개의 콘솔을 열면 값이 여전히 범위 내에 있으면 동일한 ID를 얻을 수 있습니다. 그러나 값이 범위를 벗어나는 경우에는 해당되지 않습니다.)
첫 번째 예제와 두 번째 예제의 차이점을 이해하면 세 번째 예제의 결과를 쉽게 이해할 수 있습니다. 파이썬은 "빈 목록"객체를 저장하지 않기 때문에 파이썬은 하나의 새 객체를 만들고 "빈 목록"값을 할당합니다. 두 목록이 비어 있거나 동일한 요소가 있어도 결과는 동일합니다.
>>> a = [1,10,100,1000]
>>> b = [1,10,100,1000]
>>> a == b
True
>>> a is b
False
>>> id(a)
12578024
>>> id(b)
12578056
마지막으로 마지막 예제로 이동합니다. 두 번째 예제와 마지막 예제의 유일한 차이점은 코드가 한 줄 더 있다는 것입니다.a = b
. 그러나이 코드 줄은 변수의 운명을 변경합니다.ㅏ
. 아래 결과는 그 이유를 알려줍니다.
>>> a = 1000
>>> b = 2000
>>> id(a)
2047616
>>> id(b)
5034992
>>> a = b
>>> id(a)
5034992
>>> id(b)
5034992
>>> a
2000
>>> b
2000
보시다시피a = b
, 정체성ㅏ
신원 변경비
.a = b
신원을 할당비
...에ㅏ
. 그래서 둘 다ㅏ
과비
동일한 정체성을 가지므로ㅏ
지금은 가치와 동일합니다비
, 즉 2000입니다.
마지막 예는 특히 개체가 목록 인 경우 예고없이 실수로 개체의 값을 변경할 수 있다는 중요한 메시지를 알려줍니다.
>>> a = [1,2,3]
>>> id(a)
5237992
>>> b = a
>>> id(b)
5237992
>>> a.append(4)
>>> a
[1, 2, 3, 4]
>>> b
[1, 2, 3, 4]
위의 예에서, 둘 다ㅏ
과비
동일한 신원을 가지고, 그 값은 동일해야합니다. 따라서 새 요소를 추가 한 후ㅏ
, 의 가치비
또한 영향을받습니다. 이러한 상황을 방지하기 위해 동일한 ID를 참조하지 않고 한 개체에서 다른 개체로 값을 복사하려는 경우 모든 방법에 대한 방법은 다음을 사용하는 것입니다.딥 카피
모듈에서부
(Python 문서에 링크). 목록의 경우 수행 할 수도 있습니다.b = a [:]
.
>>> import copy
>>> a = [1,2,3]
>>> b= copy.deepcopy(a)
>>> id(a)
39785256
>>> id(b)
5237992
사용[:]
새 변수에 요소 복사
>>> a = [1,2,3]
>>> id(a)
39785256
>>> b = a[:]
>>> id(b)
23850216
>>> a.append(4)
>>> a
[1, 2, 3, 4]
>>> b
[1, 2, 3]
이제 두 사람의 차이점을 이해하고이 질문에 대해 다시는 초보자가되지 않기를 바랍니다.
'Data Analytics(ko)' 카테고리의 다른 글
5 Underrated Apps for Programmers You Should Use Right Now -번역 (0) | 2020.10.09 |
---|---|
🔝Top 29 Useful Python Snippets 🔝 That Save You Time -번역 (0) | 2020.10.08 |
Scikit-Learn (Python): 6 Useful Tricks for Data Scientists -번역 (0) | 2020.10.06 |
New Features in Python 3.9 -번역 (0) | 2020.10.05 |
No More Basic Plots Please -번역 (0) | 2020.10.05 |