ChainMap.new_child()返回什么?

时间:2015-01-17 11:24:57

标签: python data-structures

我正在阅读David Beazley & Brian K. Jones 's book "Python Cookbook" (Ed 3)。在第35页,有一个ChainMap的例子。我不太明白values跳来跳去,请看下面的理解和问题:

>>> values = ChainMap()
>>> values['x'] = 1     

我想现在valuesChainMap({'x': 1})

>>> # Add a new mapping
>>> values = values.new_child() 
>>> values['x'] = 2 

在这3行的末尾,现在values是什么?里面是ChainMap还是字典?

我真的有点失落,这里的代码对我来说是ChainMap添加了一个新的孩子,它应该是一个新词典;因此values成为链接的字典项 ChainMap;然后将values分配给新词典。

>>> # Add a new mapping
>>> values = values.new_child() 
>>> values['x'] = 3

但现在values' start to call new_child()again! Isnt' new_child()can only be called by a ChainMap , not a particular字典`链接了什么?

1 个答案:

答案 0 :(得分:2)

这是一本很棒的书,我想每个Python开发人员都应该阅读至少第1章和第4章<​​/ p>

关于你的问题:

  

在这3行结束时,现在的价值观是什么?

值为ChainMap对象,其中包含2个字典:

values = ChainMap({'x': 1}, {'x': 2})

令人困惑的是,(变异的)对象本身是从new_child()而不是真正的孩子返回的。

  

但是现在值'再次开始调用new_child()!

当然,您可以根据需要多次拨打new_child()values始终为ChainMap对象,其定义方法为new_child()