я наткнулся на следующую озабоченность в Рубинерубин идентификатор объекта, DUP и переменчивость
a = [1, 2, 3]
b = a
b.delete_at(1)
b => [1,3]
a => [1,3]
b.object_id => 70178446287080
a.object_id => 70178446287080
Так я вроде есть понимание этого. a
содержит ссылку на массив на object_id
.
b
также имеет ссылку на этот же положении, как b
указывает на a
, который относится к его object_id
. В основном они ссылаются на одно и то же. Так что, если я что-то мутирую для b
, то также изменяется мутация a
.
В какую категорию входит такое поведение? Есть ли какие-либо чтения/общие практики, которые я могу запомнить, поэтому у меня не будет никаких ошибок в будущем, связанных с этим? Я знаю, что a.dup
предоставит новый объект в другом месте, так что a.dup == b
будет true
. Также для a.dup.object_id == b.object_id
.
Кроме того, является dup
и clone
по существу то же самое в этой ситуации, независимо от мелкой и глубокой?