-
카테고리
-
세부 분야
프로그래밍 언어
-
해결 여부
미해결
변수의 참조에 대해서 질문입니다.
22.02.20 06:50 작성 조회수 137
1
안녕하세요? 강의 막바지에서 좀 헤매고 있네요
해당 강의에서 다른 분꼐서 질문하신 부분(https://www.inflearn.com/questions/332096)의 내용에 대해 추가로 질문을 드리려고 합니다.
해당 질문에서 선생님이 답변해주신 부분중 두번째 단락의 내용입니다.
"""
2, 3. 이전 스텝에서 cur_node = self.head 로직이 수행되는 순간 cur_node는 self.head의 값인 Node(12)가 그대로 들어가는 것이 아니라 Node(12)의 메모리 주소값이 들어갑니다. 즉, 엄밀히 말하면, cur_node 변수는 Node(12)를 가리키게 되는 것이죠. (엄밀하게 self.head 또한 Node(12)를 가리킨 상태였던 것입니다.) 따라서 cur_node.pointer = new_node 를 하는 순간, (new_node == Node(5)) cur_nore는 Node(12)를 가리키므로 Node(12)의 poiner에 Node(5)가 들어갑니다. 그런데 self.head 또한 Node(12)를 가리키고 있으므로 self.head가 가리키는 Node(12)의 pointer가 Node(5)가 되어 결론적으로 self.head == Node(12, Node(5))가 되는 것입니다.
"""
요약하자면,
self.head와 cur_node모두 Node(12)를 보고 있었고, cur_node.pointer = Node(5)가 들어가서, self.head의 메모리 주소에 위치한 값이 Node(12,Node(5))가 되었다고 이해했는데요
이렇게 되는 이유를 제가 찾아보면서 정리했는데,
정리한 밑의 문장들이 맞는지 확인을 좀 받고 싶습니다.
Node(12,none)는 인스턴스 객체이고,
해당 item이나 pointer의 값을 저장하는 인스턴스 객체의 네임스페이스는 딕셔너리이다.
딕셔너리는 mutable하기 때문에 해당 원소들 중 하나의 값이 바뀔 수 잇따(즉 원소의 값을 변화시켜줄 때, 다른 메모리 주소를 가진 새 변수로 만들어주지 않아도 된다)
따라서, Node(12,none)은 메모리 주소의 변화없이 Node(12,5)가 될 수 있고
slef.head가 참조하는 메모리 주소역시 그대로이므로, self.head == Node(12,5)가 된다.
반대로 말하면, 'self.head == 5'와 같이 immutbale한 자료형 값을 참조하고 있었더라면, 위와같은 코드는 성립하지 않는다.(self.head에 새로운 값을 할당시켜주기 위해서는 값이 새로이 생성되어야 하고, 값이 새로이 생성되면 메모리 주소역시 바뀌므로)
또 특정 값이 None이 된다는 것은, 해당 변수의 메모리 주소자체가 없어진다는 뜻으로 이해를 해도 될까요?
정말 마지막으로, 약간은 강의외적인 부분에 대해서(완전 상관없는 부분은 아닙니다) 질문을 좀 여쭙고 싶은데, 혹시 메일을 드려도 될까요?
좋은 강의 감사했습니다.
답변을 작성해보세요.
0
윤상석
지식공유자2022.03.12
안녕하세요!
그동안 개인 사정으로 이제야 봤습니다. 죄송합니다. ㅠㅠ
정확히 이해하셨습니다. 다만, None 또한 파이썬에서 제공하는 "객체"입니다. 따라서 메모리 주소 자체가 없어지는 것은 아닙니다. id(None)을 하면 None의 주소가 찍히는 것을 확인할 수 있습니다.
메일 보내셔도 좋습니다!
좋은 질문 감사합니다.
답변 1