避免内存泄漏

时间:2014-02-17 17:12:01

标签: python list memory-leaks

下面我创建一个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)
  1. 我有义务复制旧列表的元素,因为我想独立修改它们。这是正确的吗?

  2. 由于这个系统,我在每个循环中创建Any的新实例,这些实例将保留在内存中,从而导致内存泄漏问题。这是正确的吗?

  3. 我该如何避免这种情况?

    3a)如果我添加

    怎么办?
      

    del old_list

    在函数create_new_list的末尾?

    3b)或者我应该添加

      

    [del(i)for old in old_list]

         

    del old_list

    create_new_list

    的末尾

    3c)还有其他更有效的解决方案吗?

1 个答案:

答案 0 :(得分:1)

在你的情况下,不,你不需要复制任何东西。

此外,您不需要显式释放任何内容。当它们不再被引用时,它们将被垃圾收集。