如何在python中释放列表内存的一部分? 我可以通过以下方式完成:
del list[0:j]
或单个列表节点:
del list[j]
Mark:我的脚本分析大量列表并创建巨大的输出,这就是我需要立即释放内存的原因。
答案 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'])