Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 2.7中的无内存泄漏OrderedDict替代方案?_Python_Garbage Collection_Ordereddict - Fatal编程技术网

Python 2.7中的无内存泄漏OrderedDict替代方案?

Python 2.7中的无内存泄漏OrderedDict替代方案?,python,garbage-collection,ordereddict,Python,Garbage Collection,Ordereddict,我们正在检查其中一个包是否在Python gc中留下垃圾对象,并发现collections.OrderedDict对象不会被ref count机制删除,而是被放入gc中,在对它们进行批处理和稍微调整输出时使用以下引用: <type 'list'> object at 0x10a876ab8: [ <Recursive reference to list object at 0x10a876ab8>, <Recursive reference to list ob

我们正在检查其中一个包是否在Python gc中留下垃圾对象,并发现collections.OrderedDict对象不会被ref count机制删除,而是被放入gc中,在对它们进行批处理和稍微调整输出时使用以下引用:

<type 'list'> object at 0x10a876ab8:
[ <Recursive reference to list object at 0x10a876ab8>,
  <Recursive reference to list object at 0x10a876ab8>,
  None]
这似乎与报告中的问题相同。这个问题在Python3.2中得到了修复,事实上,上面显示的引用周期出现在Python2.7中,但在Python3.7中没有

Python 2.7是否有collections.OrderedDict的无引用循环替代方案

更新:

我发现ordereddict.ordereddict也有相同的引用周期

我完全知道Python2.7已经不受支持了。尽管如此,我们仍然需要在Python2.7上支持我们的包

@Ramsha Siddiqui的答案指向Django的分类。我验证了在Django 1.7中,它的SortedDict没有引用循环。然而,至少在Django的1.11版中,SortedDict已从Django中删除


您可以对任何字典的项使用排序,如下所示:

odt = dict(sorted(dt.items()))
更新:保留原始顺序

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

from django.utils.datastructures import SortedDict
d2 = SortedDict()
如果这对你的案子有帮助,请告诉我

更新:[重复]参考:


这似乎是获得在参考周期中使用OrderedDicts的能力的解决方案。删除后,OrderedDict将无法立即释放其所有资源。

您可以对任何字典的项目使用排序,如:

odt = dict(sorted(dt.items()))
更新:保留原始顺序

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

from django.utils.datastructures import SortedDict
d2 = SortedDict()
如果这对你的案子有帮助,请告诉我

更新:[重复]参考:


这似乎是获得在参考周期中使用OrderedDicts的能力的解决方案。您将无法让OrderedICT在删除后立即释放其所有资源。

对项目进行排序与保留其原始顺序不同,OrderedICT就是这样做的。这是真的-我以前没有想到过这一点。我更新了答案。我尝试了你的建议使用django SortedAct,但它不再在我安装的django版本1.11中。From:SortedDisct在Django 1.7中被弃用,将在Django 1.9中删除。使用​collections.OrderedICT代替。无论如何,谢谢你的帮助!哦,只是为了记录:根据我们的垃圾对象检查,来自Django 1.7的SortedDict没有引用循环!!对项目进行排序与保留其原始顺序不同,OrderedDict就是这样做的。这是真的——我以前没有想到过这一点。我更新了答案。我尝试了你的建议使用django SortedAct,但它不再在我安装的django版本1.11中。From:SortedDisct在Django 1.7中被弃用,将在Django 1.9中删除。使用​collections.OrderedICT代替。无论如何,谢谢你的帮助!哦,只是为了记录:根据我们的垃圾对象检查,来自Django 1.7的SortedDict没有引用循环!!这回答了你的问题吗?这回答了你的问题吗?