深浅拷贝:
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