dict从嵌套字典中获得dict,在tcl中创建一个副本?
问题描述:
让我们看看下面的示例代码:dict从嵌套字典中获得dict,在tcl中创建一个副本?
set m [ dict create 1 [ dict create 2 3] 4 [ dict create 5 6 ] ]
set p [ dict get $m 4 ]
现在,这里是个问题。假设我没有改变p。 TCL创建另一个副本,还是只是一个指针?
谢谢。
答
Tcl的语义模型具有不可改变的价值,即当您在查看某个值时,世界上其他地方没有发生任何事情会使该值发生变化。 (变量可以改变,但这是通过将不同的值放入其中)。这样做的结果是Tcl可以积极地共享对值的引用。这意味着它的集合值(列表和字典)有效地保存了这些引用,并且dict get
操作将简单地复制一个引用;实际值本身并不存在,但字典和值都有它的句柄。它看起来就像一个副本,但效率更高。
有一个额外的细微差别:当一个变量具有仅参照值,在变量操作可以直接修改而不必复制值。然而,这不是你能看到的东西,除了它提高了性能。
答
不,它不创建新副本,直到通过对象的“所有者”之一进行更改。
但是p
仍然不是指针。对于所有编程意图和目的,它只是一个保存av值的普通变量。
为了澄清,我想知道预期的行为。不是“试着看看会发生什么”,以便我知道我能依靠什么,以及我可以作为错误报告的内容。 谢谢 – user1134991