python如何优化内存_怎样应用弱援用优化 Python 法式的内存占用?

Python 的渣滓回收机制经过援用计数来决意一个工具要不要被回收。当一个工具被援用次数为0时,它就会被作为渣滓回收从而开释 Python 内存。

但有些情形下,咱们的代码能够在不经意间招致某些实际上咱们再也不运用的工具的援用计数始终大于0,从而无奈被渣滓回收。

咱们举个例子:

得多人喜爱利用字典来寄存一些数据,假定我目前有一个字典是如许的:

此中monkey_obj, tiger_obj,panda_obj都是工具。在咱们的顺序中,能够会传入分歧的字符串来读取差别的工具。当咱们把这些工具放进字典中的时分,它的援用计数曾经被+1了。

然而,panda_obj这个工具比拟特别,它只会在程序运行的初期被查出来利用1次。以后就再也不会应用了。

但因为这个工具被放在字典内里,以是这个工具的援用计数始终大于0,Python 的渣滓回收机制就会以为这个工具还会被运用,因而它就会始终占用内存。

在数据处理范畴大概图像处理范畴,常常会涌现字典的值占用大量内存的情形,这类情形就会致使内存的虚耗。

为了处理这类环境,咱们能够利用 Python自带的weakref模块,它内里有一个WeakValueDictionary,就是用来处置这类环境的。

咱们来看看怎样运用它:

应用 weak_dict 就像应用通俗的字典同样。但赋值时,值的援用计数不会改观。

如许当咱们在其余处所删除panda这个字典时,就不会因为字典占用了一个援用计数而招致没法被渣滓回收题目。

【编辑举荐】

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

打赏支持

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值