下面我创建一个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)如果我添加
怎么办?del old_list
在函数create_new_list
的末尾?
3b)或者我应该添加
[del(i)for old in old_list]
del old_list
在create_new_list
?
3c)还有其他更有效的解决方案吗?
答案 0 :(得分:1)
在你的情况下,不,你不需要复制任何东西。
此外,您不需要显式释放任何内容。当它们不再被引用时,它们将被垃圾收集。