我用java例項來給你演示一下:
class Head{}
class Body{}
class Footer{}
class Person{
String name;
Head head;
Body body;
Footer footer;
}
Person myself = new Person(); //建立一個我自己
Person son = myself ; //我是我媽媽的兒子【引用】
Person husband = myself ; //我是我老婆的老公【引用】
上面三個變數: myself、son 、husband 都是指代我自己,我在現實中只有一個,所以三個變數引用的是同一個物件(這兒是人),變數相當於稱呼
Person copy = new Person(); //建立一個副本
copy.head
copy.body
copy.footer
myself和copy引用的不是同一個物件,但是myself中的屬性引用的是同一個,即: 共用了head、body、footer
很明顯淺複製容易引起很多問題。2個物件不同,但是物件的屬性引用相同
Person deepCopy = new Person(); //建立一個副本
myself 與deepCopy兩個物件不同(引用地址不同)
並且兩個物件中的屬性name、head、body、footer都不同。
我用java例項來給你演示一下:
//頭class Head{}
//身體class Body{}
//腳class Footer{}
//人class Person{
String name;
Head head;
Body body;
Footer footer;
}
賦值Person myself = new Person(); //建立一個我自己
Person son = myself ; //我是我媽媽的兒子【引用】
Person husband = myself ; //我是我老婆的老公【引用】
上面三個變數: myself、son 、husband 都是指代我自己,我在現實中只有一個,所以三個變數引用的是同一個物件(這兒是人),變數相當於稱呼
淺複製Person myself = new Person(); //建立一個我自己
Person copy = new Person(); //建立一個副本
copy.head
= myself.head;copy.body
= myself.body;copy.footer
= myself.footer;myself和copy引用的不是同一個物件,但是myself中的屬性引用的是同一個,即: 共用了head、body、footer
很明顯淺複製容易引起很多問題。2個物件不同,但是物件的屬性引用相同
深複製Person myself = new Person(); //建立一個我自己
Person deepCopy = new Person(); //建立一個副本
myself 與deepCopy兩個物件不同(引用地址不同)
並且兩個物件中的屬性name、head、body、footer都不同。