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

Dictionary dict从嵌套字典中获取dict,在tcl中创建副本?,dictionary,copy,tcl,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正在创建另一个副本,还是p只是一个指针?谢谢。不,在对象的某个“所有者”发生更改之前,它不会创建新副本 但是p仍然不是指针。对于所有编程意图和目的而言,它只是一个普通的变量,包含av值。Tcl的语义模型具有不变的值,即当您查看一个值时,世界

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

set m [ dict create 1 [ dict create 2 3] 4 [ dict create 5 6 ] ]
set p [ dict get $m 4 ]
现在,问题来了。假设我没有对p进行任何更改。
TCL正在创建另一个副本,还是p只是一个指针?
谢谢。

不,在对象的某个“所有者”发生更改之前,它不会创建新副本


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

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


另外还有一个细微差别:当一个变量只有一个值的引用时,对该变量的操作可以直接修改该值,而不必进行复制。然而,这并不是你能看到的东西,只是它能提高性能。

我想澄清一下,我想知道预期的行为。不是“尝试看看会发生什么”,这样我就知道我可以依赖什么,以及我可以报告什么是bug。谢谢