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)。但这通常有财务和技术限制。 :-)
如何在 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)。但这通常有财务和技术限制。 :-)