• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

변수의 참조에 대해서 질문입니다.

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이 된다는 것은, 해당 변수의 메모리 주소자체가 없어진다는 뜻으로 이해를 해도 될까요?
 
정말 마지막으로, 약간은 강의외적인 부분에 대해서(완전 상관없는 부분은 아닙니다) 질문을 좀 여쭙고 싶은데, 혹시 메일을 드려도 될까요?
 
좋은 강의 감사했습니다.

답변 1

답변을 작성해보세요.

0

안녕하세요!

그동안 개인 사정으로 이제야 봤습니다. 죄송합니다. ㅠㅠ

정확히 이해하셨습니다. 다만, None 또한 파이썬에서 제공하는 "객체"입니다. 따라서 메모리 주소 자체가 없어지는 것은 아닙니다. id(None)을 하면 None의 주소가 찍히는 것을 확인할 수 있습니다.

 

메일 보내셔도 좋습니다!

좋은 질문 감사합니다.