python 은 primitive 값이 없고 다 reference 값으로 동작하는 듯

 

python 을 공부하다가 변수의 id 가 값에 따라 달라지는 것을 확인함

 

 

a 가 123일 때의 id 값이 9788800 이고

내가 12, 1 등의 다른 값으로 덮어씌웠음.

그리고 다시 123으로 덮어씌우면 id 값이 돌아옴

 

덮어씌웠다고 표현했는데, java 를 주로 다뤄온 내 머릿속에서는

a 라는 객체에 12라는 새로운 값을 할당하면

a 객체와 (기존의) 123 값과의 연결은 끊어지고 12라는 새로운 값과 연결될거라고 생각을 하였다.

123 이라는 값은 메모리에 있다가 사라질 운명같은거였는데...

a=123 으로 똑같은 값을 다시 할당하면

기존에 메모리에 있던 값(id 가 똑같이 9788800인 값)을 다시 가져오나봐!!

 

 

그래서 혹시나 싶어 python3 를 아예 끄고 다시 들어가봄

 

 

변수 값에 123 넣어주고 id 확인한 결과.......

ㅎㄷㄷ 예전에 알고있던 그 id 값이 다시 튀어나옴

 

이제는 변수가 문제가 아니구나 싶어서 변수 이름을 다르게 줘 봄

 

 

뭥미 ㅇㅇ;; a와 b가 똑같은 값이라는 말이야??

 

 

 

정말 그랬다...........

 

변수 이름과 상관 없이,

메모리 내에 생성된 객체는 값에 따라 id 값이 할당되고,

해당 값(123)을 갖는 객체(여기서 id 가 9788800)를 원하는 변수들(위의 a, b) 이 있다면

a,b 에게 메모리 내에 9788800 객체를 넘겨주는 것이다.

 

그럼 궁금한 거

python 을 사용하는 동안 다양한 값을 갖는 객체들을 생성하게 될텐데...

그 객체들이 모두 메모리에 하나하나 다 저장된다는 말이야?

비효율적인거 아님 (??)

 

여기서 말하는 id 값이, 메모리 내의 주소 공간을 말하는게 아닌가??

변수 없이 곧바로 값의 id 를 찾아보면

 

위와 같이 나오는데, 1234와 1234567890의 id 값이 동일하다.

만약 id 가 객체의 고유 주소값이라면, 1234와 1234567890이 동일한 값을 갖는다는 말인데

동일한 값이 아니잖아.

 

 

 

+ Recent posts