python中深拷貝和淺拷貝的區別

2021-09-28 15:23:14 字數 2104 閱讀 1406

只會拷貝表層元素

同時拷貝表層和內層(子層)元素, 在記憶體中重新建立所有子元素

示例1

from copy import copy, deepcopy

a =[1,

2,3,

[4,5

,6]]

b = copy(a)

# 淺拷貝

c = deepcopy(a)

# 深拷貝b[1

]=8b[

3][0

]=8c[

1]=9

c[3][

0]=9

print

(a)# [1, 2, 3, [8, 5, 6]]

print

(b)# [1, 8, 3, [8, 5, 6]]

print

(c)# [1, 9, 3, [9, 5, 6]]

示例2
def

extendlist

(val, lst=

):return lst

list1 = extendlist(10)

# [10]

list2 = extendlist(

123,

)# [123]

list3 = extendlist(

'a')

# [10, 'a']

print

(list1)

# [10, 'a']

print

(list2)

# [123]

print

(list3)

# [10, 'a']

示例3
from copy import copy, deepcopy

from pickle import dumps, loads

a =[

'x',

'y',

'z']

b =[a]*2

# [['x','y','z'], ['x','y','z']]

c = copy(b)

d = deepcopy(b)

# 先序列化, 再反序列化 dumps(***, 4) 第二個引數是協議,可以是0-4, 數字越大, 序列化的時間越快

# 功能和深拷貝一致

# 自定義實現深拷貝

from pickle import loads, dumps

my_deepcopy =

lambda item: loads(dumps(item,4)

)a = my_deepcopy([1

,2,3

,[4,

5,6]

])a[3

][0]

=9print

(a)

python中的淺拷貝和深拷貝

不得不說 python核心程式設計 是一本好書,看到其中一節做一下隨筆。在python中,當建立乙個物件後,然後把它賦給另乙個物件時,python並沒有去拷貝這個物件,而是拷貝了這個物件的引用。看不懂沒關係,我們看乙個例子。raw list first second 12 32 copy list ...

python中的深拷貝和淺拷貝

淺拷貝 copy 不拷貝物件的內容,僅僅拷貝子物件的引用 深拷貝 deepcopy 會連同拷貝子物件的記憶體,對子物件的修改不會影響源物件 下面用 來測試 import copy deftest copy 淺拷貝測試 a 10 20,5,6 b copy.copy a print a a,end t...

python中的淺拷貝和深拷貝

本篇介紹下python中的深拷貝和淺拷貝,主要從基本型別 類 不可變型別等方面進行介紹。1.介紹拷貝之前首先應該明白is和 的區別,即is表示同乙個物件,比較的是值 a 1000 b 1000 a b true a is bfalse class person object def init sel...