python 에서 is 와 쌍 은 호"="의 차이 점 예시 상세 설명

2397 단어 pythonis쌍 등호
머리말
본 고 를 시작 하기 전에 먼저 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 이 었 다.
소결:
  • ==비교 조작 부호:두 대상 이 같은 지 비교 하고 value 를 판단 요소 로 한다.
  • is 동일 성 연산 자:두 대상 이 동일 한 지 비교 판단 하고 id 를 판단 요소 로 한다.
  • 총결산
    이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가치 가 있 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.

    좋은 웹페이지 즐겨찾기