回覆列表
  • 1 # 使用者2180107962444

    反對上面的答案。綜合介紹下面三種情形:

    賦值

    將物件直接使用等號賦值,只是讓等號的左值擁有右值的一個引用,相當於指標賦值一樣。在這個過程中,沒有新物件產生。

    淺複製

    淺複製已經和賦值有著本質區別了。淺複製會在記憶體中建立一個新的物件,並將被複製的物件的所有資料成員都複製到新的物件中。

    深複製

    複製相對於賦值,其目的是產生和原來一樣的新的物件。但是,即便使用了淺複製也不一定是徹徹底底和原來的物件獨立了。考慮下面的情景下:

    物件a的某資料成員X,是物件b的引用

    在這種情況下,假設我們使用淺複製物件a生成新物件aa,那麼a.X和aa.X依然都是同一個b的引用。這是因為,淺複製只是給物件的所有資料成員進行了賦值操作,而對b的引用的賦值,正如上面所講的,只是讓新物件也擁有對b的引用,而沒有繼續複製物件b。

    因此,深複製就是在這點上區分於淺複製的。當深複製在遇到引用資料成員時,不會只賦值引用,而是會複製一個新的。

    所以,在上面的情景下:

    使用淺複製時,a.X和aa.X是同一個b的引用

    使用深複製時,a.X是b的引用,而aa.X是由“b複製來的bb”的引用。

  • 中秋節和大豐收的關聯?
  • 考研暑假不能返校,如何在家高效學習?