redis哨兵機制
阿新 • • 發佈:2020-09-11
深拷貝和淺拷貝最根本的區別在於是否真正獲取一個物件的複製實體,而不是引用。
假設B複製了A,修改A的時候,看B是否發生變化:
如果B跟著也變了,說明是淺拷貝,拿人手短!(修改堆記憶體中的同一個值)
如果B沒有改變,說明是深拷貝,自食其力!(修改堆記憶體中的不同的值)
淺拷貝(shallowCopy)只是增加了一個指標指向已存在的記憶體地址,
深拷貝(deepCopy)是增加了一個指標並且申請了一個新的記憶體,使這個增加的指標指向這個新的記憶體,
使用深拷貝的情況下,釋放記憶體的時候不會因為出現淺拷貝時釋放同一個記憶體的錯誤。
淺複製:僅僅是指向被複制的記憶體地址,如果原地址發生改變,那麼淺複製出來的物件也會相應的改變。
深複製:在計算機中開闢一塊新的記憶體地址用於存放複製的物件。
自己的理解:
1.深/淺拷貝複製物件之後,兩個物件的引用的hash值不同。
2.深/淺拷貝生成物件之後,更改拷貝物件中的普通成員變數,原物件中的普通成員變數的值不會被修改。
3.淺拷貝生成物件之後,更改拷貝物件中的引用型別變數的屬性,原物件中的引用型別變數的屬性會隨著被修改(因為堆記憶體中的變數不進行復制)
4.深拷貝生成物件之後,更改拷貝物件中的引用型別變數的屬性,原物件中的引用型別變數的屬性不會隨著被修改(因為堆記憶體中的變數會進行復制)