Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 什么';克隆和复制的区别是什么_Arrays_Crystal Lang - Fatal编程技术网

Arrays 什么';克隆和复制的区别是什么

Arrays 什么';克隆和复制的区别是什么,arrays,crystal-lang,Arrays,Crystal Lang,因此,我一直在学习crystal,没有ruby背景,并注意到api文档中有#dup和#clone基本上用于复制数组 这两者到底有什么区别?api显示#dup浅拷贝数组,而#clone深拷贝所述数组。我不确定具体需要什么以及应该使用哪一个。\dup将复制内存中的数组,即它包含的项目列表,但不会复制项目本身。变异新数组不会影响上一个数组(例如,push,pop),但变异其任何项都会影响上一个数组的项,因为这些项是相同的对象 #clone将通过递归调用#clone来复制内存中的数组列表及其项。这是原始

因此,我一直在学习crystal,没有ruby背景,并注意到api文档中有
#dup
#clone
基本上用于复制数组

这两者到底有什么区别?api显示
#dup
浅拷贝数组,而
#clone
深拷贝所述数组。我不确定具体需要什么以及应该使用哪一个。

\dup
将复制内存中的数组,即它包含的项目列表,但不会复制项目本身。变异新数组不会影响上一个数组(例如,
push
pop
),但变异其任何项都会影响上一个数组的项,因为这些项是相同的对象

#clone
将通过递归调用
#clone
来复制内存中的数组列表及其项。这是原始阵列的完整克隆。改变任何东西,即使是深嵌套对象,也不会影响原始内容

请注意,这适用于任何对象,而不仅仅是数组,并且可以通过覆盖您自己对象中的方法来定制行为

也就是说,它只适用于对象数组(例如类实例)。对于基元数组(整数、浮点、结构…),项目将通过
#dup
与数组列表一起复制