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

List tcl lrange是否在后台创建原始列表的新副本,list,memory,tcl,List,Memory,Tcl,假设我有一个巨大的列表变量。如果我使用lrange命令引用列表中的某个范围,tcl是在保留原始列表(假设返回值未保存到变量中)的同时创建该范围的副本,还是使用一些不可变的引用“shtick”来保存内存 例如:假设我有一个list变量biggie,我的脚本99%的内存占用都在保存biggie列表上。这行代码会不会导致我的脚本的内存占用几乎翻倍 foreach [ lrange $biggie 1 end-1 ] 谢谢使用lrange命令复制列表元素。不过,所消耗的内存量可能不会翻倍;两个列表中存

假设我有一个巨大的列表变量。如果我使用
lrange
命令引用列表中的某个范围,tcl是在保留原始列表(假设返回值未保存到变量中)的同时创建该范围的副本,还是使用一些不可变的引用“shtick”来保存内存

例如:假设我有一个list变量biggie,我的脚本99%的内存占用都在保存biggie列表上。这行代码会不会导致我的脚本的内存占用几乎翻倍

foreach [ lrange $biggie 1 end-1 ]

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


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

谢谢。因此,元素越大,相对足迹越小。伟大的