深拷貝和淺拷貝問題

2021-08-05 20:20:50 字數 1201 閱讀 4646

下午遇到乙個關於乙個表的數值拷貝的問題,有點意思,不多說,直接上**

--記錄玩家的資訊

self._userinfo = {};

for i=1,play_count do

table.insert(self._userinfo,self._deskuserlist:getuserbydeskstation(i-1))

end這樣拷貝的資料是淺拷貝,所以原始資料改變的話,這裡的資料也是會改變的,等於號在lua中也是淺拷貝,所以有的時候,你想儲存乙份資料的時候,就要小心了,

在這裡先提供解決深拷貝方法,原理暫時不是很懂:

function clone(object)

local lookup_table = {}

local function _copy(object)

if type(object) ~= "table" then

return object

elseif lookup_table[object] then

return lookup_table[object]

endlocal newobject = {}

lookup_table[object] = newobject

for key, value in pairs(object) do

newobject[_copy(key)] = _copy(value)

endreturn setmetatable(newobject, getmetatable(object))

endreturn _copy(object)

end這個函式使用方法如下:

--記錄玩家的資訊

self._userinfo = {};

self._userinfo= clone(self._deskuserlist._users)

這樣就可以解決這個問題。

下面是冒泡時間

。。。。。。。。。。。。。。。

。。。。。。。。。。。。。。

。。。。。。。。。。。。。

。。。。。。。。。。。。

。。。。。。。。。。。

。。。。。。。。。。

。。。。。。。。。

。。。。。。。。

。。。。。。。

。。。。。。

。。。。。

。。。。

。。。。。

深拷貝和淺拷貝

淺拷貝就是物件的資料成員之間的簡單賦值,如你設計了乙個沒有類而沒有提供它的複製建構函式,當用該類的乙個物件去給令乙個物件賦值時所執行的過程就是淺拷貝,如 class a a private int data int main 這一句b a 就是淺拷貝,執行完這句後b.data 5 如果物件中沒有其他...

淺拷貝和深拷貝

以下情況都會呼叫拷貝建構函式 乙個物件以值傳遞的方式傳入函式體 例如 已知class a,class b void func a a void func a a func b b 此時函式對b的操作是呼叫拷貝建構函式後的臨時拷貝物件。多數傳指標 乙個物件以值傳遞的方式從函式返回 如 return b...

深拷貝和淺拷貝

ios提供了copy和mutablecopy方法,顧名思義,copy就是複製了乙個imutable的物件,而mutablecopy就是複製了乙個mutable的物件。以下將舉幾個例子來說明。1 系統的非容器類物件 這裡指的是nsstring nsnumber等等一類的物件。nsstring stri...