Что означает клонировать () объект?

django-command-extensions является django библиотекой, которая дает некоторые дополнительные команды manage.py. Один из них является sqldiff, который должен дать Вам, sql должен был обновить к Вашей новой модели. Это, однако, перечислено как 'очень экспериментальное'.

8
задан Byron Whitlock 17 November 2009 в 15:27
поделиться

2 ответа

Клонирование фактически копирует данные объекта в новый объект.

В этом примере данные не клонируются:

Foo p = new Foo();
Foo o = p;

Если Foo имеет член ] a и вы меняете pa , затем oa также изменяется, потому что оба p и o указывают на один и тот же объект.

Однако

Foo p = new Foo();
Foo o = p.Clone();

В этом случае, если вы измените pa , тогда oa останется прежним, потому что они фактически указывают на отдельные объекты.

На самом деле есть два разных способа клонирования : мелкий клон или глубокий клон.

Мелкий клон просто создает новый объект и копирует его члены в новый объект. Это означает, что если один из членов на самом деле является указателем на другой объект, то этот объект будет совместно использоваться старым и новым объектами.

Глубокий клон действительно проходит и клонирует всех членов в новый объект. Таким образом, объекты будут полными копиями всех данных.

10
ответ дан 5 December 2019 в 14:03
поделиться

Вообще говоря, объекты передаются по ссылке. Итак, если вы скажете $ objB = $ objA , вы не получите новый объект; вы получаете новое имя для того же объекта. Однако, если вы скажете $ objB = clone $ objA , вы получите копию $ objA . В первом случае все, что вы делаете с $ objB , также происходит с $ objA . Во втором случае $ objB не зависит.

2
ответ дан 5 December 2019 в 14:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: