파이썬 리스트를 삭제하지 않으면 메모리에 계속 남아있나요?

조회수 3058회
    order_list= ['치약', '비누', '화장지']

    for i in order_list:
        save_list = []
        save_list.append(i)

이런 식으로 for문으로 순회하면서 save_list를 생성하고 사용하는데요.

save_list가 for문 한번 실행될때마다 메모리에서 생성되고 삭제되는게 아닌가요?

위의 예처럼 작은경우는 상관없는데 데이터가 많아지면 memory error이 떠서요.

저는 save_list가 for문 한번 끝나면 자동으로 삭제되서 메모리 반환되고 다시 생성된다고 생각했거든요.

그게 아니고 메모리에 남아있는건지 궁금합니다.

그리고 만약에 메모리에 남아있다고 하면

del save_list

를 사용하면 될까요?

  • save_list = [] 가 for 안에 있나요? 그러면 매번 초기화입니다... 정영훈 2019.3.2 22:25
  • 네 for 안에 있는데 매번 초기화될때 메모리 반환하는지가 궁금했었습니다. 임현준 2019.3.19 13:28

1 답변

  • 좋아요

    1

    싫어요
    채택 취소하기

    객체의 레퍼런스 카운트가 0이면 해당 객체는 가비지 컬렉션 대상이 되며, 이후 가비지 컬렉트 시 해당 객체는 사라지게 됩니다.

    예시의 코드에서는 for 반복문을 순회할 때마다 새로운 리스트 객체가 생성되고 이전의 리스트 객체는 참조를 잃으므로, save_list를 몇 번을 생성하든 이전에 만들어진 save_list는 가비지 컬렉션 대상이 되기 때문에 MemoryError을 발생시키는 원인이 되지 않습니다.

    추정컨대, 아래의 for 반복문과 상관없이 order_list의 크기가 너무 커서 MemoryError를 발생시키는 것으로 생각됩니다.

    • (•́ ✖ •̀)
      알 수 없는 사용자
    • 감사합니다. for문이 한번 순회할때 리스트가 사라진다면 다른 문제겠네요. 임현준 2019.3.19 13:23

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)