直接賦值 淺拷貝和深拷貝

2021-10-06 04:08:19 字數 2037 閱讀 9848

**

我們經常使用的:

student s1 =

newstudent()

;student s2 = s1;

直接物件賦值,它只是拷貝了物件引用位址而已,並沒有在堆記憶體重新生成乙個新的物件(如下圖)。上面的s1和s2引用其實都是指向堆中同乙個student例項位址。所以如果改下s1中的任何成員變數(基本型別或者引用型別),s2中相對應的成員變數也會改變。

//輸出:

//利用序列化實現深拷貝

//student1: student1(name=lyt, age=24, body=body(high=152))

//深拷貝:student2: student1(name=lyt, age=24, body=body(high=152))

//修改值後

//student1: student1(name=lst, age=25, body=body(high=200))

//深拷貝:student2: student1(name=lyt, age=24, body=body(high=152))

深拷貝 淺拷貝 直接賦值

使用直接賦值後兩個物件就完全一樣,隨著改變乙個物件的值另乙個物件的值也隨之改變。淺拷貝,物件中的值型別互補影響,但是引用型別 string雖然是引用型別但特殊存在類值型別 隨著乙個物件的值改變另乙個也會改變。深拷貝,兩個物件完全獨立互補影響 1 class program212 13 1415 pu...

python直接賦值 深拷貝和淺拷貝

python中,物件賦值實際上是物件的引用。當建立乙個物件,將其賦值給另乙個變數,python並沒有拷貝這個物件,而是拷貝了這個物件的引用。所以如果從單純的賦值語句來實現clone物件的話,那可能bug出現的也會莫名其妙.python中可以使用copy模組來複製物件.copy.copy 為淺拷貝,只...

淺拷貝 深拷貝和淺賦值 深賦值

include includeusing namespace std class string else 淺拷貝 也就是系統預設的拷貝,可寫可不寫。string const string s 預設的拷貝構造 深拷貝 string const string s string s2 s1 深賦值 str...