Что такое мелкая копия?
Неглубокая копия - это бит-копия объекта. Создается новый объект, который имеет точную копию значений в исходном объекте. Если какое-либо из полей объекта является ссылкой на другие объекты, копируются только ссылочные адреса, т. Е. Копируется только адрес памяти. [/g1]
На этом рисунке MainObject1
есть поля field1
типа int и ContainObject1
типа ContainObject
. Когда вы делаете мелкую копию MainObject1
, MainObject2
создается с field2
, содержащим скопированное значение field1
и все еще указывая на ContainObject1
. Обратите внимание, что поскольку field1
имеет примитивный тип, его значение копируется в field2
, но поскольку ContainedObject1
является объектом, MainObject2
все еще указывает на ContainObject1
. Поэтому любые изменения, сделанные в ContainObject1
в MainObject1
, будут отражены в MainObject2
.
Теперь, если это мелкая копия, давайте посмотрим, что такое глубокая копия?
Что такое Deep Copy?
Глубокая копия копирует все поля и создает копии динамически выделенной памяти, на которые указывают поля. Глубокая копия возникает, когда объект копируется вместе с объектами, к которым он относится. [/g2]
На этом рисунке MainObject1 имеют поля типа field1
типа int и ContainObject1
типа ContainObject
. Когда вы делаете глубокую копию MainObject1
, MainObject2
создается с field2
, содержащим скопированное значение field1
и ContainObject2
, содержащее скопированное значение ContainObject1
. Обратите внимание, что любые изменения, сделанные в ContainObject1
в MainObject1
, не будут отображаться в MainObject2
.