Python中的可用内存

时间:2017-12-24 08:10:14

标签: python memory memory-management out-of-memory dealloc

如何在python中释放列表内存的一部分? 我可以通过以下方式完成:

del list[0:j]  

或单个列表节点:

del list[j] 

Mark:我的脚本分析大量列表并创建巨大的输出,这就是我需要立即释放内存的原因。

2 个答案:

答案 0 :(得分:1)

你无法在Python中手动释放内存。

使用del减少对象的引用计数。一旦该引用计数达到零,就会在运行垃圾收集器时释放该对象。

因此,您可以做的最好的事情是在gc.collect()一堆对象之后手动运行del

在这些情况下,最好的建议通常是尝试更改算法。例如,使用生成器代替列表,如Thijs在评论中建议的那样。

另一个策略是抛出硬件问题(购买更多内存)。但这通常有财务和技术限制。 : - )

答案 1 :(得分:0)

您可以通过四种常用方法(包括collections.deque)删除列表中的项目:

  

list remove()方法:

remove删除第一个匹配值,而不是特定索引

请记住,此方法不会返回任何值,但会从列表中删除给定的对象。

示例:

list_1 = [987, 'abc', 'total', 'cpython', 'abc'];
list_1.remove('abc')
print(list_1)
list_1.remove('total')
print(list_1)

输出:

[987, 'total', 'cpython', 'abc']
[987, 'cpython', 'abc']
  

第二种方法是list del()方法

你必须在这里指定index_no

list_1 = [987, 'abc', 'total', 'cpython', 'abc'];
del list_1[1]
print(list_1)
del list_1[-1:]
print(list_1)

输出:

[987, 'total', 'cpython', 'abc']
[987, 'total', 'cpython']
  

第三个是list pop()方法:

pop()删除并返回列表中的最后一项。

list_1 = [987, 'abc', 'total', 'cpython', 'abc'];
list_1.pop()
print(list_1)
list_1.pop()
print(list_1)
list_1.pop()
print(list_1)

输出:

[987, 'abc', 'total', 'cpython']
[987, 'abc', 'total']
[987, 'abc']
  

Forth方法是collections.deque

还有一些外部模块方法,如:

  

您可以从双端队列的两侧弹出值:

from collections import deque

d = deque()

d.append('1')
d.append('2')
d.append('3')
print(d)

d.popleft()
print(d)
d.append('1')
print(d)

d.pop()
print(d)

输出:

deque(['1', '2', '3'])
deque(['2', '3'])
deque(['2', '3', '1'])
deque(['2', '3'])