Lua高階系列 之深拷貝與淺拷貝

2021-10-25 08:20:42 字數 1245 閱讀 6566

歡迎來到lua高階系列的部落格

lua中我們使用 = 來進行淺拷貝,使用函式clone()來進行深拷貝

如果拷貝的物件裡的元素只有值(string、number、boolean等基礎型別),那淺拷貝和深拷貝沒有差別,都會將原有物件複製乙份,產生乙個新物件。如果是乙個表的話,則淺拷貝拷貝出來的物件和拷貝前的實際上是同乙個物件,佔同乙個記憶體,而深拷貝才建立出乙個新的記憶體,乙個新的物件。

淺拷貝與深拷貝的例子

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 new_table = {}

lookup_table[object] = new_table

for key, value in pairs(object) do

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

endreturn setmetatable(new_table, getmetatable(object))

endreturn _copy(object) -- 返回clone出來的object表指標/位址

end

lua中clone的源**十分簡短,但是如果第一次看的話還是比較容易看懵

local num = clone(123)

我們如果傳進去的物件不是表型別的話,那麼我們就會直接把這個值return出去,然後再利用=號進行一次淺拷貝,上文提過如果是數值型別的話,淺拷貝也會生成乙個物件。那麼如果如果傳的object是乙個表型別的話,則遞迴去把object中的key, value複製到乙個新建立的表中,最後再把object的元表設定成新表的元表。這樣就完成了整個深轉殖的過程了。

python高階 深拷貝 淺拷貝

複製需要區分,複製的是原始檔的資料,還是指向原始檔資料的位址 1.引用 b a時,理解為b指向了a指向的資料,相當於引用複製 a 1,2 b a 驗證複製的是資料還是位址 1.檢視ab的位址 id a 2677646858824 2.淺拷貝 copy.copy import copy a 1,2 b...

python高階之深拷貝和淺拷貝

a 18b 18id a 結果為4321867632 id b 結果為4321867632c 1 2,3 d 1 2,3 e c id c 結果為4372284616 id d 結果為4371531592 id e 結果為4372284616 這就是python裡面關於變數和引用的關係,如果我們通過...

Lua的淺拷貝和深拷貝

在lua中,使用 進行淺拷貝,根據拷貝物件的不同,又分為兩種情況 1.拷貝物件為string number boolean等基礎型別時,拷貝的過程是進行複製貼上。建立乙個新的物件,拷貝出來的新物件和原來的物件互不影響,互不干涉,所以修改拷貝出來的物件的值不會影響到原來的物件的值!local valu...