tcl lrange 是否在幕后创建原始列表的新副本

does tcl lrange create under the hood a new copy or not of the original list

假设我有一个庞大的列表变量。如果我使用 lrange 命令从列表中引用一个范围,tcl 是否会创建该范围的副本,同时保留原始列表(假设 return 值未保存到变量中),或者使用一些不可变引用 "shtick" 来节省内存?

例如:假设我有列表变量 biggie,并且我的脚本大约 99% 的内存占用都用于保存 biggie 列表。此行是否会导致我的脚本的内存占用几乎翻倍?

foreach [ lrange $biggie 1 end-1 ]

谢谢

lrange 命令复制列表元素。不过,消耗的内存量可能不会 double;两个列表中都存在的元素将通过引用处理。将被复制的内存将是存储指向元素的指针数组的内存;在 32 位系统上每个元素 4 个字节,在 64 位系统上每个元素 8 个字节(加上少量的固定开销)。

列表的任何字符串表示都不会共享。