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이 동일한 값을 갖는다는 말인데
동일한 값이 아니잖아.
'Python3' 카테고리의 다른 글
[PySpark] 문법 예제 : filter, where (0) | 2021.05.02 |
---|---|
[IPython] Jupyter Notebook 에서 tab 자동완성이 안 먹히는 경우 해결했던 방법 (0) | 2021.04.27 |
[Python3] 객체와 인스턴스의 차이 (0) | 2021.04.26 |
[Python3] pyspark 를 jupyter notebook, python3 에서 실행하기 (0) | 2021.03.30 |
[Python3] sys.stderr.write(f"ERROR: {exc}") 에러 해결 방법 (0) | 2021.03.30 |