안녕하세요? 이번에 Python 을 사용하다 간단한 질문이 생겼는데 어디 물어봐야 할 지 몰라 여기 글을 올립니다.
기존에 포트란이나 C를 써보긴 했었는데 Python 의 경우는 처음인지라 생소하네요.
너무 기초적인 질문이라 물어봐도 될지는 모르겠으나, 잠시 여쭙고자 합니다.
현재 python에서 is와 ==간의 차이점이 제대로 이해가 되지 않아 글을 올립니다.
녹색 창에 물어보니 is의 경우 type까지 판별한다고 하는데, 그럼에도 불구하고 무엇인가 석연찮은 구석이 있네요
예를들면
a=[1,2,3]
b=a
라고 a와 b에 동일한 list를 뽑아옵니다.
이 경우 a==b 를 물어볼 경우 true가 나옵니다
a is b를 물어볼 경우도 마찬가지로 true가 작성됩니다.
만약
a=[1,2,3]
b=[1,2,3]
일 경우에는
a is b 를 물어보면 false, a==b를 물어보면 true가 뜹니다.
이경우 행렬 위치값이라 그럴수 있다고 생각했습니다.
문제는 이후입니다.
그렇다면
str(a[0])+str(a[1])+str(a[2]) is str(b[0])+str(b[1])+str(b[2])
이 경우에는 각 구성요소를 str로 변환하여 type까지 맞추어 준것으로 생각되는데 왜 false가 뜰까요?
마찬가지로
str(a[0])+str(a[1])+str(a[2]) == str(b[0])+str(b[1])+str(b[2])
의 경우에는 true가 작동됩니다.
부디 답변 부탁드립니다.
==´Â °ªÀ» ºñ±³ÇѴ°ÍÀ̶ó ±×·¸½À´Ï´Ù.
a = 1
b = a
a is b = true
id(a), id(b) µ¿ÀÏÇϸé(°°Àº¸Þ¸ð¸®ÁÖ¼Ò¸é) is¿¡¼´Â true°¡ ¹ÝȯµÈ´Ù°í »ý°¢ÇÏ½Ã¸é µË´Ï´Ù.
p.s ÆÄÀ̼±Àº -5ºÎÅÍ 256±îÁöÀÇ int¸¦ ij½ÌÇÏ°í ÀÖ½À´Ï´Ù.
https://github.com/python/cpython/blob/4830f581af57dd305c02c1fd72299ecb5b090eca/Objects/longobject.c#L18-L23
Áú¹®ÀÌ ÀÖ½À´Ï´Ù.
¸¸¾à ¿ÀºêÁ§Æ®ÀÇ ·¹ÆÛ·±½º°ªÀ» ºñ±³ÇÏ´Â °ÍÀ̶ó¸é
a=[1,2,3]
b=1
a[0] is b
¿¡¼ °ªÀº false°¡ ³ª¿Í¾ß ÇÏ´Â°Ô ¾Æ´ÑÁö¿ä.
Àú´Â ¿©±â¼ a[0]°ªÀ» int ÇüÅÂÀÇ value ¹Þ¾Æ¿Ô±â ¶§¹®¿¡ ÀÌ°Ô ¼ö¸³Çß´Ù°í »ý°¢Çß°Å´ø¿ä.
±×·¡¼
a=[1,2,3]
b=[1,2,3]
a[0] is b[0]
ÀÌ·¸°Ô Çß´õ´Ï true°¡ ³ª¿À´õ¶ó±¸¿ä
±×·¡¼ ÀÌ°É str·Î º¯È¯À» ½ÃÄѼ
'1'+'2' is '1'+'2' ÇüÅ (true)·Î º¯È½ÃÅ°°íÀÚ
str(a[0])+str(a[1]) is str(b[0])+str(b[1])
·Î ½è´Âµ¥ ¿Ö ¿©±â¿¡´Â false°¡ ³ª¿À´Â °É±î¿ä?
int ¿Í °°Àº ÀÚ·áÇü¿¡¼± is ·Î ºñ±³ÇÒ °æ¿ì ·¹ÆÛ·±½º ºñ±³°¡ ¾Æ´Ñ value ºñ±³¸¦ ÇÏ´Â °Í °°³×¿ä.
a=[1,2,3]
b=1
a[0] is b
¿¡¼
a=[300,2,3]
b=300
a[0] is b
Çغ¸½Ã¸é False ¹Ýȯ°ªÀÌ ³ª¿É´Ï´Ù
±×·¯¸é ¿äÁö´Â ¿ø·¡´Â a=[1,2,3] b=1 a[0] is b
¿¡¼µµ ¾ÈµÇ¾ß Á¤»óÀε¥ ƯÁ¤ ±ºÁý³× Á¤¼ö³»¿¡¼´Â °°Àº ¸Þ¸ð¸® ÁÖ¼Ò¸¦ °øÀ¯Çϱ⠶§¹®¿¡ ³ª¿Â´Ù°í ÀÌÇØÇÏ¸é µÉ±î¿ä?
±×·¸´Ù¸é µÎ °³ ±ºÀÇ ¸Þ¸ð¸®°¡ ¾Æ´Ñ µ¥ÀÌÅÍ°ªÀ» ºñ±³ÇÏ´Â °æ¿ì ¾î¶² ¹æ½ÄÀ¸·Î ¼³Á¤À» ÇؾßÇÒ±î¿ä?
»ç½Ç Àû´Ùº¸´Ï copy¿Í °°ÀÌ °°Àº ¸Þ¸ð¸® ÁÖ¼Ò¸¦ °øÀ¯ÇÏÁö ¾Ê´ÂÀÌ»ó ÀÌ°Ô °¡´ÉÇϱä ÇÒ±î? ¶ó´Â Àǹ®ÀÌ µé±âµµÇѵ¥.. Ȥ½Ã ¹æ¹ýÀÌ ÀÖ´Ù¸é¿ä.
ÀÌ·¸°Ô ¸ðÈ£ÇÑ ¸éÀÌ ÀÖÀ¸¸é (·¹ÆÛ·±½º Á¤µ¶À» Ç϶ó°í ÇÑ´Ù¸é ÇÒ¸»ÀÌ ¾ø°ÚÁö¸¸) ¾²¸é¼µµ ºÒ¾È ºÒ¾ÈÇÒ °Í °°³×¿ä.
1 ¹ÙÀÌÆ®·Î ³ªÅ¸³¾ ¼ö ÀÖ´Â °ªÀ̸é 0~255ÀÏÅÙµ¥ ±×°Íµµ ¾Æ´Ï°í...?
>>> a=[ i for i in range(-257,258)]
>>> b=[ i for i in range(-257,258)]
>>> for i in range(0,514):
print( a[i], a[i] is b[i])
ÀÌ·¸°Ô -257~+257 ±îÁö µ¹·ÁºÃ´Âµ¥, ¿ª½Ã 0~256 »çÀ̸¸ true°¡ ³ª¿À³×¿ä.