Python 中的可用内存

Free memory in Python

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

del list[0:j]  

或对于单个列表节点:

del list[j] 

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

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

list remove() method :

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

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

示例:

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']

Second method is list del() method

您必须在此处指定 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']

Third one is list pop() method :

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

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 method is collections.deque

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

You can pop values from both sides of the 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'])

您无法在 Python 中真正手动释放内存。

使用del 减少对象的引用计数。一旦该引用计数达到零,该对象将在垃圾收集器 运行.

时被释放

所以你能做的最好的事情就是在 del-ing 一堆对象之后手动 运行 gc.collect()


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

另一种策略是用硬件解决问题(购买更多 RAM)。但这通常有财务和技术限制。 :-)