Ниже я создаю список из 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) Что делать, если добавить
дель old_list
в конце функции
create_new_list
?3b) Или я должен добавить
[дель (я) для г в old_list]
дель old_list
в конце
create_new_list
?3c) Есть ли еще более эффективное решение?
Утечка памяти, когда выделенная память не отпущена. У Python есть сбор мусора, поэтому утечка памяти невозможна. – StoryTeller
Первый экземпляр списка 'a' имеет право на выпуск или сбор мусора, как только вы перестанете ссылаться на него, т. Е. Когда вы назначаете список, возвращенный из' create_new_list', на 'a'. Нет утечки. – Useless