1. 程式人生 > >賦值、copy()以及deepcopy()的區別

賦值、copy()以及deepcopy()的區別

針對以下程式碼進行分析舉例

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中的引數,執行結果如下