2016-12-14 89 views
2

讓我們看看下面的示例代碼: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創建另一個副本,還是隻是一個指針?
謝謝。

+0

爲了澄清,我想知道預期的行爲。不是「試着看看會發生什麼」,以便我知道我能依靠什麼,以及我可以作爲錯誤報告的內容。 謝謝 – user1134991

回答

2

Tcl的語義模型具有不可改變的價值,即當您在查看某個值時,世界上其他地方沒有發生任何事情會使該值發生變化。 (變量可以改變,但這是通過將不同的值放入其中)。這樣做的結果是Tcl可以積極地共享對值的引用。這意味着它的集合值(列表和字典)有效地保存了這些引用,並且dict get操作將簡單地複製一個引用;實際值本身並不存在,但字典和值都有它的句柄。它看起來就像一個副本,但效率更高。

有一個額外的細微差別:當一個變量具有參照值,在變量操作可以直接修改而不必複製值。然而,這不是你能看到的東西,除了它提高了性能。

2

不,它不創建新副本,直到通過對象的「所有者」之一進行更改。

但是p仍然不是指針。對於所有編程意圖和目的,它只是一個保存av值的普通變量。

相關問題