賦值、copy()以及deepcopy()的區別
阿新 • • 發佈:2018-11-26
針對以下程式碼進行分析舉例
L1 = [1, 2, 3, 4]
L = [ L1, 5, 7]
L2 = L
Import copy
L3 = copy.copy(L2)
L4 = copy.deepcopy(L2)
1.賦值
L1 = [1, 2, 3, 4]
在計算機記憶體中開闢一塊記憶體,讓L1指向這塊記憶體區域,L中的每個元素依次繫結物件1,2,3,4。
L = [ L1, 5, 7]
在計算機記憶體中開闢一塊區域,讓L指向該區域,L的第0個元素繫結L1,第二個元素繫結物件5,第三個元素繫結物件7
L2 = L
讓L2這個變數也繫結L所繫結的物件,所以當L1或L中的元素變化時,L2 中的元素也會相應的發生改變。
2.copy()
L3 = copy.copy(L2)
只是拷貝了L2這一層,沒有進行深層次的拷貝,即在記憶體中開闢了一個空間,與變數L3進行繫結,L3的第一個元素與L1繫結,L3的第2個元素和第3個元素分別與物件5和物件7繫結,所以改變L1中的元素,L3中的元素會隨之改變,但L2中的元素改變時,L3中的元素不會改變
3.deepcopy()
L4 = deepcopy(L2)
相當於將L2中的每一層都進行拷貝了一遍,所以無論怎麼改變L1和L2中的元素,L4中的元素都不會改變。
4.舉例,現在修改L1和L中的引數,執行結果如下