1. 策略
- 适时删除不再使用的对象:一旦确定某个复杂数据结构不再需要,立即使用
del
删除。例如在函数中,当处理完数据且函数即将结束时,删除局部变量的数据结构。
- 打破循环引用:对于对象的循环引用,使用
del
来打破引用关系,使垃圾回收器能够回收相关对象。例如,若两个类的实例互相引用,在合适的时机手动删除其中一方对另一方的引用。
2. 工具
sys.getrefcount()
:可用于查看对象的引用计数。虽然Python的垃圾回收机制并非单纯依赖引用计数,但该工具能辅助了解对象引用情况。例如:
import sys
a = {'key': [1, 2, 3]}
print(sys.getrefcount(a))
gc
模块:Python的垃圾回收模块,可以手动触发垃圾回收,也能查看垃圾回收的状态等。例如:
import gc
# 手动触发垃圾回收
gc.collect()
3. 代码示例
def process_large_data():
large_dict = {
'key1': {
'sub_key1': [1, 2, 3, 4, 5],
'sub_key2': {
'nested_key': 'a long string' * 10000
}
},
'key2': [{'sub_sub_key': 'data'}] * 1000
}
# 处理数据
result = sum(len(v) for v in large_dict.values())
# 数据处理完,不再需要large_dict
del large_dict
return result
class A:
def __init__(self):
self.b = None
class B:
def __init__(self):
self.a = None
a = A()
b = B()
a.b = b
b.a = a
# 打破循环引用
del a.b
del b.a