我有一些代码,其中类的实例具有父< - >子引用,例如:
class Node(object):
def __init__(self):
self.parent = None
self.children = {}
def AddChild(self, name, child):
child.parent = self
self.children[name] = child
def Run():
root, c1, c2 = Node(), Node(), Node()
root.AddChild("first", c1)
root.AddChild("second", c2)
Run()
Run Code Online (Sandbox Code Playgroud)
我认为这会创建循环引用root,c1并且c2在Run()完成后不会被释放,对吗?那么,如何让它们被释放?我想我可以做点什么root.children.clear(),或者self.parent = None- 但如果我不知道该怎么做呢?
这是使用weakref模块的合适时间吗?什么,我究竟是什么弱反应?该parent属性?该children属性?整个对象?上述所有的?我看到有关WeakKeyDictionary和weakref.proxy的讨论,但我不清楚它们应该如何使用,如果有的话,在这种情况下.
这也是在python2.4上(无法升级).
更新:示例和摘要
weakref-ify的哪些对象取决于哪个对象可以在没有另一个对象的情况下生存,以及哪些对象相互依赖.生命时间最长的对象应包含较短寿命对象的弱化参数.同样,不应该将weakrefs设置为依赖项 - 如果它们是依赖项,依赖项可能会默默地消失,即使它仍然需要.
例如,如果你有一个树结构,root有子节点kids,但可以没有子root节点,那么该对象应该使用weakrefs kids.如果子对象依赖于父对象的存在,情况也是如此.下面,子对象需要父对象来计算其深度,因此强对齐parent.kids但是,属性的成员是可选的,因此使用weakrefs来阻止循环引用. …
根据sass 的说法,该@import声明是针对弃用的,有利于@use,但在 jekyll 文档中只有第一种示例......但是我无法让后者工作!
当我尝试从部分引用变量时_color.sass:
$duck-blue: #199
Run Code Online (Sandbox Code Playgroud)
在其他部分中使用 use 语句_nav.sass:
@use 'color'
.duckdiv:
border: 2px solid color.$duck-blue
Run Code Online (Sandbox Code Playgroud)
Jekyll 抛出以下内容
Error: Invalid CSS after "...2px solid color": expected expression (e.g. 1px, bold), was ".$duck-blue; }"
Run Code Online (Sandbox Code Playgroud)
@use如果我替换为@import并删除color.变量前面的范围,一切都会正常。
我有什么地方搞错了吗?