'Python列表賦值拷貝,淺拷貝,深拷貝的區別'

Python 編程python新視野 2019-07-29
"

賦值拷貝又稱引用拷貝

本質是創建一個指向被拷貝列表的引用,他們使用的是同一塊內存區域,因為無論更改其中任何一個變量,我們被拷貝的變量也會跟著改變。簡單的來說,賦值拷貝,無論把列表賦值給多少個變量,這些變量指向的都是同一個列表.如下面的例子,創建一個列表list1,將list1賦值給list3,然後給list3添加一個元素9,打印list3和list1,list3增加了一個元素9,list1也增加了一個元素9.打印他們的內存地址id,id是一樣的.

```Python資源共享群:484031800

list1 = [1, 2, 3, 4]

list3 = list1

list3.append(9)

print(list3)

print(list1)

print(id(list1))

print(id(list3))

```

"

賦值拷貝又稱引用拷貝

本質是創建一個指向被拷貝列表的引用,他們使用的是同一塊內存區域,因為無論更改其中任何一個變量,我們被拷貝的變量也會跟著改變。簡單的來說,賦值拷貝,無論把列表賦值給多少個變量,這些變量指向的都是同一個列表.如下面的例子,創建一個列表list1,將list1賦值給list3,然後給list3添加一個元素9,打印list3和list1,list3增加了一個元素9,list1也增加了一個元素9.打印他們的內存地址id,id是一樣的.

```Python資源共享群:484031800

list1 = [1, 2, 3, 4]

list3 = list1

list3.append(9)

print(list3)

print(list1)

print(id(list1))

print(id(list3))

```

Python列表賦值拷貝,淺拷貝,深拷貝的區別

淺拷貝

淺拷貝:淺拷貝是一維內存拷貝【不完全拷貝】,對於多維的列表,還會有內存公用的情況。

如下面的例子,創建一個二維列表list2,將list2拷貝給list4,先打印list4,與list2的內容一樣;在list4

的一為列表下標為0的位置插入元素"b",list2的二維列表末尾添加元素"a",然後打印list4,與list2,

發現list2中的一為列表沒有發生變化,在二維列表的末尾也添加了一個元素"a",這就是多維列

表內存公用的情況.

```

list2=[1,2,3,[7,8,9]]

list4=list2.copy()

print(list4)

list4.insert(0,"b")

list4[-1].append("a")

print(list4)

print(list2)

```

"

賦值拷貝又稱引用拷貝

本質是創建一個指向被拷貝列表的引用,他們使用的是同一塊內存區域,因為無論更改其中任何一個變量,我們被拷貝的變量也會跟著改變。簡單的來說,賦值拷貝,無論把列表賦值給多少個變量,這些變量指向的都是同一個列表.如下面的例子,創建一個列表list1,將list1賦值給list3,然後給list3添加一個元素9,打印list3和list1,list3增加了一個元素9,list1也增加了一個元素9.打印他們的內存地址id,id是一樣的.

```Python資源共享群:484031800

list1 = [1, 2, 3, 4]

list3 = list1

list3.append(9)

print(list3)

print(list1)

print(id(list1))

print(id(list3))

```

Python列表賦值拷貝,淺拷貝,深拷貝的區別

淺拷貝

淺拷貝:淺拷貝是一維內存拷貝【不完全拷貝】,對於多維的列表,還會有內存公用的情況。

如下面的例子,創建一個二維列表list2,將list2拷貝給list4,先打印list4,與list2的內容一樣;在list4

的一為列表下標為0的位置插入元素"b",list2的二維列表末尾添加元素"a",然後打印list4,與list2,

發現list2中的一為列表沒有發生變化,在二維列表的末尾也添加了一個元素"a",這就是多維列

表內存公用的情況.

```

list2=[1,2,3,[7,8,9]]

list4=list2.copy()

print(list4)

list4.insert(0,"b")

list4[-1].append("a")

print(list4)

print(list2)

```

Python列表賦值拷貝,淺拷貝,深拷貝的區別

深拷貝

深拷貝:完全內存拷貝,將多維列表中的內容遞歸的複製一遍,重新存儲到一塊新的內存空間

因此在深拷貝不會出現內存公用的情況。深度拷貝需要導入copy模塊,如下面例子,將list2拷貝給

list5,在list5中下標為0的位置插入"b",二維列表末尾添加a,打印結果,只有list5發生了變化,list2 並

沒有發生變化.這就是深度拷貝,完全拷貝.

```

import copy

list2 = [1, 2, 3, [7, 8, 9]]

list5 = copy.deepcopy(list2)

list5[-1].append("a")

list5.insert(0, "b")

print(list5)

print(list2)

```

"

賦值拷貝又稱引用拷貝

本質是創建一個指向被拷貝列表的引用,他們使用的是同一塊內存區域,因為無論更改其中任何一個變量,我們被拷貝的變量也會跟著改變。簡單的來說,賦值拷貝,無論把列表賦值給多少個變量,這些變量指向的都是同一個列表.如下面的例子,創建一個列表list1,將list1賦值給list3,然後給list3添加一個元素9,打印list3和list1,list3增加了一個元素9,list1也增加了一個元素9.打印他們的內存地址id,id是一樣的.

```Python資源共享群:484031800

list1 = [1, 2, 3, 4]

list3 = list1

list3.append(9)

print(list3)

print(list1)

print(id(list1))

print(id(list3))

```

Python列表賦值拷貝,淺拷貝,深拷貝的區別

淺拷貝

淺拷貝:淺拷貝是一維內存拷貝【不完全拷貝】,對於多維的列表,還會有內存公用的情況。

如下面的例子,創建一個二維列表list2,將list2拷貝給list4,先打印list4,與list2的內容一樣;在list4

的一為列表下標為0的位置插入元素"b",list2的二維列表末尾添加元素"a",然後打印list4,與list2,

發現list2中的一為列表沒有發生變化,在二維列表的末尾也添加了一個元素"a",這就是多維列

表內存公用的情況.

```

list2=[1,2,3,[7,8,9]]

list4=list2.copy()

print(list4)

list4.insert(0,"b")

list4[-1].append("a")

print(list4)

print(list2)

```

Python列表賦值拷貝,淺拷貝,深拷貝的區別

深拷貝

深拷貝:完全內存拷貝,將多維列表中的內容遞歸的複製一遍,重新存儲到一塊新的內存空間

因此在深拷貝不會出現內存公用的情況。深度拷貝需要導入copy模塊,如下面例子,將list2拷貝給

list5,在list5中下標為0的位置插入"b",二維列表末尾添加a,打印結果,只有list5發生了變化,list2 並

沒有發生變化.這就是深度拷貝,完全拷貝.

```

import copy

list2 = [1, 2, 3, [7, 8, 9]]

list5 = copy.deepcopy(list2)

list5[-1].append("a")

list5.insert(0, "b")

print(list5)

print(list2)

```

Python列表賦值拷貝,淺拷貝,深拷貝的區別

"

相關推薦

推薦中...