相关疑难解决方法(0)

安全地迭代WeakKeyDictionary和WeakValueDictionary

的文档的Python 3.2weakref模块WeakKeyDictionary,并WeakValueDictionary有一张纸条上遍历这些容器:

注意:注意:因为WeakKeyDictionary是在Python字典之上构建的,所以在迭代它时不能改变大小.这对于WeakKeyDictionary来说可能很难确保,因为程序在迭代期间执行的操作可能会导致字典中的项目"通过魔法"消失(作为垃圾收集的副作用).

作为这些容器行为的规范,这似乎相当可怕.特别是当运行使用CPython的垃圾收集器的代码(当使用包含循环的数据结构时)或使用另一个Python实现(例如Jython)时,听起来似乎没有安全的方法来迭代这些集合.

当垃圾收集器可以在程序中的任何位置清除引用时,如何安全地迭代这些集合?有一个CPython的解决方案是我的首要任务,但我也对其他实现的问题感兴趣.

这可能是一种迭代WeakKeyDictionary的安全方法吗?

import weakref

d = weakref.WeakKeyDictionary()

...

for k, v in list(d.items()):
    ...
Run Code Online (Sandbox Code Playgroud)

python dictionary weak-references

9
推荐指数
2
解决办法
2514
查看次数

标签 统计

dictionary ×1

python ×1

weak-references ×1