Inflearn brand logo image

인프런 커뮤니티 질문&답변

애롱님의 프로필 이미지
애롱

작성한 질문수

38군데 합격 비법, 2025 코딩테스트 필수 알고리즘

3-5. 스택

스택 Pop 메모리 제거

해결된 질문

작성

·

21

0

1. 현재 학습 진도

  • 몇 챕터/몇 강을 수강 중이신가요? 03_06_stack.py

     

  • 어떤 알고리즘을 학습하고 계신가요? 스택

  • 여기까지 이해하신 내용은 무엇인가요? 스택이 기존 링크드 리스트 자료구조에 기반한 알고리즘.

     

 

2. 어려움을 겪는 부분

  • 어느 부분에서 막히셨나요? pop함수에서 self.head = self.head.next로 원래 head를 다음노드로 옮기는 부분.

  • 코드의 어떤 로직이 이해가 안 되시나요? head가 옮겨 졌다 라는 걸로 pop 라는 개념을 표현하신 거 같은데 원래 self.head는 메모리에서 안사라진거 아닌가요? 메모리는 계속 점유하고 있을거고, 그저 head의 위치만 바꿔준 거니 표면적으로 보이기에만 pop인것 같은데 편의상 이렇게 하신건지 정말 pop이라는 개념 자체가 제거가 아닌 head를 옮기는 개념인건지 잘 모르겠습니다.

     

     

 

이렇게 구체적으로 알려주시면, 더 정확하고 도움이 되는 답변을 드릴 수 있습니다! 😊

답변 1

0

딩코딩코님의 프로필 이미지
딩코딩코
지식공유자

안녕하세요 애롱님 좋은 질문 감사합니다!!

원래 head 노드는 메모리에서 완전히 제거됩니다. Python에는 가비지 컬렉터라는 기능이 있어서, 더 이상 사용되지 않는 메모리를 자동으로 찾아서 해제하게 됩니다

이는 참조 카운팅에 의해서 동작합니다. Python은 각 객체가 몇 번 참조되고 있는지 계속 세고 있습니다

python

def pop(self):
    delete_head = self.head        # 이 순간 원래 head 노드의 참조 카운트: 2개
    self.head = self.head.next     # self.head가 다른 노드를 가리킴 (참조 카운트 1개로 감소)
    return delete_head             # 함수가 끝나면 delete_head 변수도 사라짐 (참조 카운트 0이 됨)

참조 카운트가 0이 되는 순간, Python은 "아 이 메모리 더 이상 필요 없구나"라고 판단하고 즉시 메모리에서 제거해버립니다.

C나 C++에서는 개발자가 직접 free()delete를 호출해야 하지만, Python, Java, JavaScript 같은 언어들은 모두 이런 식으로 자동 메모리 관리를 해줍니다.

정리하면, self.head = self.head.next는 단순히 포인터만 옮기는 게 아니라, 실제로 원래 노드를 메모리에서 제거하는 완전한 pop 연산이에요. Python이 뒤에서 알아서 처리해주게 됩니다!

혹시 더 궁금한 점 있으면 언제든 물어보세요. 이런 깊이 있는 질문 정말 좋습니다!! 감사합니다

애롱님의 프로필 이미지
애롱
질문자

답변 감사합니다!! 저는 swift로 개발을 하고 있는데, swift의 ARC와 기능이 비슷한 것 같네요!

딩코딩코님의 프로필 이미지
딩코딩코
지식공유자

오 넵!! 그렇네요 ㅎㅎㅎ 찾아보니 비슷한 원리로 메모리를 관리하는 것 같습니다 몰랐던 개념인데 알려주셔서 감사합니다 ㅎㅎ

애롱님의 프로필 이미지
애롱

작성한 질문수

질문하기