Python 学习日记第六篇 -- 深浅拷贝
深浅拷贝:
1、字符串和数字
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
import copy
#浅拷贝 copy.copy() #深拷贝 copy.deepcopy() ###################################################################################### a1 = "string"
#a1 = 11 a2 = a1 a3 = copy.copy(a1) a4 = copy.deepcopy(a1) print( id (a1))
print( id (a2))
print( id (a3))
print( id (a4))
########## result: 2719424 2719424 2719424 2719424 |
由上,可以看出字符串与数字,赋值、浅拷贝、深拷贝,其结果是一样的,都指向了同一个内存地址
2、字典,列表,元组
1
2
3
4
5
6
7
8
9
|
1、赋值:只是创建了一个引用,内存地址不变 d1 = { 'k1' : 'v1' , 'k2' :123, 'k3' :[11, '22' ,]}
d2 = d1 print( id (d1))
print( id (d2))
########## result: 5349704 5349704 |
1
2
3
4
5
6
7
8
9
10
11
12
13
|
2、浅拷贝,在内存中额外创建第一层引用 d1 = { 'k1' : 'v1' , 'k2' :123, 'k3' :[11, '22' ,]}
d2 = copy.copy(d1) print( id (d1))
print( id (d1[ 'k3' ]))
print( id (d2[ 'k3' ]))
print( id (d2))
########## result: 34971976 35475168 35475168 35225192 |
1
2
3
4
5
6
7
8
9
10
11
12
13
|
3、深拷贝,在内存中创建除字符串与数字外的所有层 d1 = { 'k1' : 'v1' , 'k2' :123, 'k3' :[11, '22' ,]}
d2 = copy.deepcopy(d1) print( id (d1))
print( id (d1[ 'k3' ]))
print( id (d2[ 'k3' ]))
print( id (d2))
########## result: 6922568 7425760 7361520 6922808 |
本文转自 元婴期 51CTO博客,原文链接:http://blog.51cto.com/jiayimeng/1932127