Python 2.7中的无内存泄漏OrderedDict替代方案?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python 2.7中的无内存泄漏OrderedDict替代方案?相关的知识,希望对你有一定的参考价值。
[我们正在检查我们的程序包中是否有一个在Python gc中留下了垃圾对象,并发现collections.OrderedDict
对象并未被ref-count机制删除,而是被放入GC中,并带有以下引用(当pprint进行处理时)并稍微调整输出):
<type 'list'> object at 0x10a876ab8:
[ <Recursive reference to list object at 0x10a876ab8>,
<Recursive reference to list object at 0x10a876ab8>,
None]
[这似乎与https://bugs.python.org/issue9825中报告的问题相同。该问题已在Python 3.2中修复,实际上,上面显示的参考周期出现在Python 2.7上,而不是出现在Python 3.7上。
对于Python 2.7,是否有collections.OrderedDict
的免费循环替代品?
更新:
我发现
ordereddict.OrderedDict
也具有相同的参考周期。我完全知道Python 2.7已不受支持。尽管如此,我们仍然需要在Python 2.7上支持我们的软件包。
@ Ramsha Siddiqui的答案指向Django的SortedDict。我验证了在Django 1.7中,其SortedDict没有参考循环。但是,SortedDict已从Django中删除(至少在其版本1.11中)。
odt = dict(sorted(dt.items()))
更新:保留原始订单如果您想保留原始顺序,也有一个Django库:
from django.utils.datastructures import SortedDict d2 = SortedDict()
让我知道这对您的情况是否有帮助。
以上是关于Python 2.7中的无内存泄漏OrderedDict替代方案?的主要内容,如果未能解决你的问题,请参考以下文章
翻译: 如何使用 Xcode 的内存图调试器检测 iOS 内存泄漏并保留周期
内存泄漏在哪里? python - 如何在python中的多处理期间使线程超时?