아래에서 Any
인스턴스의 목록을 만든 다음이 목록을 수정하고 마지막으로 무작위로이 목록의 일부 요소를 선택하여 새 목록을 작성했습니다. 그때 독립적으로 수정할로메모리 누출 피하기
from random import choice
import copy
class Any():
def __init__(self,x):
self.x=x
def modify (self):
self.x += choice([0,1])
return self
def create_new_list (old_list):
new_list = [copy.deepcopy(old_list[choice(range(len(old_list)))]) for i in range(len(old_list))]
return new_list
a = [Any(0),Any(19),Any(3),Any(10)] # Create the original list
for iteration in xrange(20):
[i.modify() for i in a]
a = create_new_list(a)
나는 이전 목록의 요소를 복사 할 의무가 있어요. 맞습니까?
이 시스템 때문에 모든 루프에서
Any
이라는 새로운 인스턴스가 생성되어 메모리 누수 문제가 발생합니다. 맞습니까?어떻게 피할 수 있습니까?
3A) 내가 기능
create_new_list
의 끝에서델
3B), 또는 I는
create_new_list
끝에델 old_list
[old_list에 대한 I) 델 (I]
추가 하는가?
3c) 다른 효율적인 솔루션이 있습니까?
메모리 누수는 할당 된 메모리가 해제되지 않은 경우입니다. 파이썬에는 가비지 콜렉션이 있으므로 메모리 누출은 없습니다. – StoryTeller
리스트'a'의 첫 번째 인스턴스는 더 이상 참조하지 않을 때, 즉'create_new_list'에서 반환 된리스트를'a'에 할당 할 때 릴리스 또는 가비지 콜렉션에 적합합니다. 누수가 없습니다. – Useless