dict从嵌套字典中获取dict,在tcl中创建一个副本?

时间:2016-12-14 17:56:05

标签: dictionary copy tcl

让我们看下面的示例代码:

set m [ dict create 1 [ dict create 2 3] 4 [ dict create 5 6 ] ]
set p [ dict get $m 4 ]

现在,问题就在这里。假设我没有改变p。 TCL是创建另一个副本,还是只是一个指针?
谢谢。

2 个答案:

答案 0 :(得分:2)

不,在通过对象的某个“所有者”进行更改之前,它不会创建新副本。

但是p仍然不是指针。对于所有编程意图和目的,它只是一个保持av值的普通变量。

答案 1 :(得分:2)

Tcl的语义模型具有不可变的值,即,当您查看某个值时,世界其他地方发生的任何事情都不会使该值发生变化。 (变量可以改变,但这是通过将不同的值放入其中。)这样做的结果是Tcl可以积极地共享对值的引用。这意味着它的集合值(列表和字典)可以有效地保存这些引用,而dict get操作只会复制引用;实际值本身既不存在,也不存在字典和值都有句柄。它看起来就像一个副本,但效率更高。

还有一个细微差别:当变量具有对值的引用时,对变量的操作可以直接修改该值而不必复制。然而,除了可以提升性能之外,这不是你能看到的东西。