python 에서 is 와 쌍 은 호"="의 차이 점 예시 상세 설명
본 고 를 시작 하기 전에 먼저 Python 에 포 함 된 세 가지 기본 요 소 를 알 아야 한다.그것 이 바로 id(신분 표지),python type()(데이터 형식)과 value(값)이다.is 와==모두 대상 을 비교 판단 하 는 역할 을 하지만 대상 을 비교 판단 하 는 내용 은 다르다.다음은 구체 적 인 차이 점 이 어디 에 있 는 지 살 펴 보 자.
문제점 을 발견 하 다
최근 파트너 에 게 GIS 의 각 고 층 데 이 터 를 가 져 오 는 데 사용 할 작은 코드 를 쓰 고 있 는데,python 에 서 는'is'를 사용 하여'=='을 대체 하 였 으 며,그 결과 512 까지 다운로드 하 는 중 문제 가 발생 하 였 다.
코드 는 다음 과 같다.
def get_next(x, y, z):
z += 1
if z is 2**x: # if z == 2**x
y += 1
z = 0
if y is 2**(x+1):
x += 1
y = 0
return x, y, z
이것 은 다음 고 층 데 이 터 를 가 져 오 는 URL 의 함수 입 니 다.그 결과 다음날 친구 가 x==9,y==0,z=512 에 다운로드 가 중단 되 었 다 고 알려 주 었 습 니 다.탐색 하 다.
우선,상기 코드 에 따 르 면 z 는 논리 적 으로 512 와 같 을 수 없다 는 것 을 알 수 있 습 니 다.모든 것 이 이 함수 에 문제 가 있 는 지 의심 하기 시 작 했 습 니 다.그러나 이렇게 간단 한 함 수 는 아무리 봐 도 문제 가 있어 서 는 안 됩 니 다.그래서 코드 와 함께 발견 하기 시 작 했 습 니 다.
if z is 2**x
처,x==9,y=0,z=512 시 if 뒤에 false 가 돌 아 왔 다.나 는 계산 기 를 몇 번 이나 계산 해서 자신 이 2 차원 이 아니 라 는 것 을 확인 한 후에 is 의 문 제 를 의심 하기 시작 했다.결실
StackOverflow 에서 답 을 찾 았 습 니 다.
Is there a difference between == and is in Python?
is will return True if two variables point to the same object, == if the objects referred to by the variables are equal.
>>> a = [1, 2, 3]
>>> b = a
>>> b is a
True
>>> b == a
True
>>> b = a[:]
>>> b is a
False
>>> b == a
True
In your case, the second test only works because Python caches small integer objects, which is an implementation detail. For larger integers, this does not work:
>>> 1000 is 10**3
False
>>> 1000 == 10**3
True
그리고 가장 큰 재 활용 가능 한 int 가 얼마나 큰 지 스스로 작은 단락 을 썼 습 니 다.
a = 0
b = 0
while a is b:
a += 1
b += 1
마지막 으로 가장 큰 것 은 256 이 었 다.소결:
이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가치 가 있 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로마 숫자를 정수로 또는 그 반대로 변환그 중 하나는 로마 숫자를 정수로 변환하는 함수를 만드는 것이었고 두 번째는 그 반대를 수행하는 함수를 만드는 것이었습니다. 문자만 포함합니다'I', 'V', 'X', 'L', 'C', 'D', 'M' ; 문자열이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.