Python中的淺拷貝與深拷貝

2021-09-27 01:52:22 字數 2246 閱讀 9013

1.淺拷貝

情況1的例項如下:

import copy

a = [1, 2]

b = [3, 4]

c = [a, b] # 注意這裡的c就是乙個可變物件!

d = copy.copy(c)

print("變數c:", c)

print("----------------------------------")

print("變數d:", d)

結果:

變數c: [[1, 2], [3, 4]]

----------------------------------

變數d: [[1, 2], [3, 4]]

原因分析:需要拷貝的物件c是乙個list,即可變物件。因為c的最外層是[a,b]。因此在執行淺拷貝時,僅僅把最外層拷貝過來,而裡面的值沒有拷貝過來

情況2的例項如下:

import copy

a = [1, 2]

b = [3, 4]

c = (a, b) # 注意這裡的c就是乙個不可變物件!

d = copy.copy(c)

print("變數c:", c)

print("----------------------------------")

print("變數d:", d)

結果:

變數c: ([1, 2], [3, 4])

----------------------------------

變數d: ([1, 2], [3, 4])

原因分析:因為c = (a,b),c是乙個元組tuple,即c的最外層是乙個不可變物件。當d在進行淺拷貝操作時,直接引用c的位址,不會再為d開闢新的位址空間。

2.深拷貝

情況1例項如下:

import copy

a = [1, 2] # a是可變物件

b = copy.deepcopy(a)

print("變數a:", a)

print("----------------------------------")

print("變數b:", b)

結果:

變數a: [1, 2]

----------------------------------

變數b: [1, 2]

情況2例項如下:

import copy

a = [1, 2]

b = [3, 4]

c = (a, b) # 注意這裡外層的c就是乙個不可變物件!但是裡面的a和b都是可變物件!

d = copy.deepcopy(c)

print("變數c:", c)

print("----------------------------------")

print("變數d:", d)

結果:

變數c: ([1, 2], [3, 4])

----------------------------------

變數d: ([1, 2], [3, 4])

情況3例項如下:

import copy

a = (1, 2)

b = (3, 4)

c = (a, b) # 注意這裡外層的c就是乙個不可變物件!但是裡面的a和b也都是不可變物件!

d = copy.deepcopy(c)

print("變數c:", c)

print("----------------------------------")

print("變數d:", d)

結果:

變數c: ((1, 2), (3, 4))

----------------------------------

變數d: ((1, 2), (3, 4))

原因分析:因為c = (a,b),c是乙個元組tuple,即c的最外層是乙個不可變物件;同時,裡面的a和b也是元組物件,不可變物件。當d在進行深拷貝操作時,直接引用c的位址,不會再為d開闢新的位址空間,與淺拷貝的第二種情況一樣

python 中的拷貝 淺拷貝與深拷貝

0.序列指什麼?序列型別是指容器內的元素從0開始的索引順序訪問,一次可以訪問乙個或者多個元素,包括字串 string 元組 tuple 列表 list the difference between tuple and list tuple would not be changed,but list ...

python中淺拷貝與深拷貝

淺拷貝,拷貝的是父物件,不會拷貝到內部的子物件。單從乙個淺字就可以看出他拷貝的東西不深,可以理解為只拷貝一層 import copy a 1,ss 2,3 b copy.copy a print b print id a print id b 現在有乙個列表a裡面有數字,字串,列表和字典 用淺拷貝的...

python中的深拷貝與淺拷貝

在python中拷貝預設為淺拷貝,因為占用時間和記憶體交少 淺拷貝 num list1 1 2,3 1,2,3 4,5 6,7 8,9 num list2 num list1.copy print before print num list1 print num list2 num list2 2 ...