#dup
будет дублировать массив в памяти, то есть список элементов, которые он содержит, но он не будет дублировать сами элементы. Мутирование нового массива не повлияет на предыдущий массив (например, push
, pop
), но мутация любого из его элементов повлияет на элемент предыдущего массива, поскольку элементы являются одинаковыми объектами.
#clone
будет дублировать список массивов в памяти, но также и его элементы, путем рекурсивного вызова #clone
. Это полный клон исходного массива. Мутирование любого, даже глубокого вложенного объекта, не повлияет на исходный контент.
Обратите внимание, что это относится к любому объекту, а не только к массивам, и что поведение может быть изменено путем переопределения методов в ваших собственных объектах.
Это, как говорится, применяется только для массивов объектов (например, экземпляров класса). Для массивов примитивов (integer, float, struct ...) элементы будут скопированы вместе со списком массивов на #dup
.