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的免费循环替代品?

更新:

  1. 我发现ordereddict.OrderedDict也具有相同的参考周期。

  2. 我完全知道Python 2.7已不受支持。尽管如此,我们仍然需要在Python 2.7上支持我们的软件包。

  3. @ Ramsha Siddiqui的答案指向Django的SortedDict。我验证了在Django 1.7中,其SortedDict没有参考循环。但是,SortedDict已从Django中删除(至少在其版本1.11中)。

答案
您可以在任何字典的项目上使用sorted(),如下所示:

odt = dict(sorted(dt.items()))

更新:保留原始订单

如果您想保留原始顺序,也有一个Django库:

from django.utils.datastructures import SortedDict d2 = SortedDict()

让我知道这对您的情况是否有帮助。

以上是关于Python 2.7中的无内存泄漏OrderedDict替代方案?的主要内容,如果未能解决你的问题,请参考以下文章

python列表中的内存泄漏问题

插入中的Python mysql内存泄漏

翻译: 如何使用 Xcode 的内存图调试器检测 iOS 内存泄漏并保留周期

内存泄漏在哪里? python - 如何在python中的多处理期间使线程超时?

从 python 中的共享库返回的数组 - 这是内存泄漏吗?

OpenCV Python:如何避免 py3 中的 cv2.imwrite() 内存“泄漏”?