本文實(shí)例講述了python直接賦值、淺拷貝與深度拷貝。分享給大家供大家參考,具體如下:
- 直接賦值:其實(shí)就是對(duì)象的引用(別名)。
- 淺拷貝(copy):拷貝父對(duì)象,不會(huì)拷貝對(duì)象的內(nèi)部的子對(duì)象。
- 深拷貝(deepcopy): copy 模塊的 deepcopy 方法,完全拷貝了父對(duì)象及其子對(duì)象。
字典淺拷貝實(shí)例
實(shí)例
1
2
3
4
5
6
7
|
>>>a = { 1 : [ 1 , 2 , 3 ]} >>> b = a.copy() >>> a, b ({ 1 : [ 1 , 2 , 3 ]}, { 1 : [ 1 , 2 , 3 ]}) >>> a[ 1 ].append( 4 ) >>> a, b ({ 1 : [ 1 , 2 , 3 , 4 ]}, { 1 : [ 1 , 2 , 3 , 4 ]}) |
深度拷貝需要引入 copy 模塊:
實(shí)例
1
2
3
4
5
6
7
|
>>> import copy >>> c = copy.deepcopy(a) >>> a, c ({ 1 : [ 1 , 2 , 3 , 4 ]}, { 1 : [ 1 , 2 , 3 , 4 ]}) >>> a[ 1 ].append( 5 ) >>> a, c ({ 1 : [ 1 , 2 , 3 , 4 , 5 ]}, { 1 : [ 1 , 2 , 3 , 4 ]}) |
解析
1、b = a: 賦值引用,a 和 b 都指向同一個(gè)對(duì)象。
2、b = a.copy(): 淺拷貝, a 和 b 是一個(gè)獨(dú)立的對(duì)象,但他們的子對(duì)象還是指向統(tǒng)一對(duì)象(是引用)。
b = copy.deepcopy(a): 深度拷貝, a 和 b 完全拷貝了父對(duì)象及其子對(duì)象,兩者是完全獨(dú)立的。
更多實(shí)例
以下實(shí)例是使用 copy 模塊的 copy.copy( 淺拷貝 )和(copy.deepcopy ):
實(shí)例
1
2
3
4
5
6
7
8
9
10
11
12
13
|
#!/usr/bin/python # -*-coding:utf-8 -*- import copy a = [ 1 , 2 , 3 , 4 , [ 'a' , 'b' ]] #原始對(duì)象 b = a #賦值,傳對(duì)象的引用 c = copy.copy(a) #對(duì)象拷貝,淺拷貝 d = copy.deepcopy(a) #對(duì)象拷貝,深拷貝 a.append( 5 ) #修改對(duì)象a a[ 4 ].append( 'c' ) #修改對(duì)象a中的['a', 'b']數(shù)組對(duì)象 print ( 'a = ' , a ) print ( 'b = ' , b ) print ( 'c = ' , c ) print ( 'd = ' , d ) |
以上實(shí)例執(zhí)行輸出結(jié)果為:
('a = ', [1, 2, 3, 4, ['a', 'b', 'c'], 5])
('b = ', [1, 2, 3, 4, ['a', 'b', 'c'], 5])
('c = ', [1, 2, 3, 4, ['a', 'b', 'c']])
('d = ', [1, 2, 3, 4, ['a', 'b']])
希望本文所述對(duì)大家python程序設(shè)計(jì)有所幫助。
原文鏈接:https://www.runoob.com/w3cnote/python-understanding-dict-copy-shallow-or-deep.html