안녕하세요. 어떻게 보면 굉장히 간단한 질문일 수도 있는데, 아무리 구글링을 해도
관련 된 답을 구할 수가 없어서 이렇게 문의 드립니다.
파이썬에서는 특정 개체에 대한 레퍼런스를 변수(이름)가 갖게 되는데요,
아래 예에서는 그러한 사실을 명확히 보여 주고 있습니다.
>>> id(1)
1636939440
>>> a = 1
>>> b = 1
>>> c = 1
>>> id(a)
1636939440
>>> id(b)
1636939440
>>> id(c)
1636939440
정수 1은 1636939440이라는 메모리 주소를 갖고 있고,
변수 a,b,c는 정수 1이 갖고 있는 메모리 주소를 레퍼런스로
갖고 있음이 확인되는데요, 문제는 왜 실수(부동 소수)는
정수와 다르게 동작하는 걸까요?
>>> id(3.14)
34312864
>>> a = 3.14
>>> b = 3.14
>>> c = 3.14
>>> id(a)
34312864
>>> id(b)
34312600
>>> id(c)
34312432
위에서 보는 바와 같이 실수 3.14는 34312864라는 메모리 주소를
갖고 있는데 반해 변수 a,b,c는 정수와 달리 각각 다른 레퍼런스를
보유하고 있음이 드러납니다.
문자열도 한 번 살펴 보았는데요, 결과는 아래와 같습니다.
>>> id("hello")
43566560
>>> a = "hello"
>>> b = "hello"
>>> c = "hello"
>>> id(a)
43566560
>>> id(b)
43566560
>>> id(c)
43566560
문자열 "hello"는 43566560라는 메모리 주소를 갖고 있고
변수 a,b,c는 문자열 "hello"가 갖고 있는 메모리 주소를
레퍼런스로 갖고 있음이 확연히 보이는 실정입니다.
정수와 문자열은 동일하게 동작하는데 왜 실수만 다른 걸까요?
특별한 이유라도 있는 것 같은데요, 정말 궁금합니다!