파이썬 리스트를 삭제하지 않으면 메모리에 계속 남아있나요?
조회수 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
를 사용하면 될까요?
1 답변
-
객체의 레퍼런스 카운트가 0이면 해당 객체는 가비지 컬렉션 대상이 되며, 이후 가비지 컬렉트 시 해당 객체는 사라지게 됩니다.
예시의 코드에서는 for 반복문을 순회할 때마다 새로운 리스트 객체가 생성되고 이전의 리스트 객체는 참조를 잃으므로, save_list를 몇 번을 생성하든 이전에 만들어진 save_list는 가비지 컬렉션 대상이 되기 때문에 MemoryError을 발생시키는 원인이 되지 않습니다.
추정컨대, 아래의 for 반복문과 상관없이 order_list의 크기가 너무 커서 MemoryError를 발생시키는 것으로 생각됩니다.
-
(•́ ✖ •̀)
알 수 없는 사용자
-
댓글 입력