1. 程式人生 > 實用技巧 >Python 學習日記第六篇 -- 深淺拷貝

Python 學習日記第六篇 -- 深淺拷貝

深淺拷貝:

1、字串和數字

importcopy
#淺拷貝
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、賦值:只是建立了一個引用,記憶體地址不變
d1={'k1':'v1','k2':123,'k3':[11,'22',]}
d2=d1
print(id(d1))
print(id(d2))
##########
result:
5349704
5349704


wKioL1k0F6zTZ59uAAAzeS93P3k751.png

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

wKioL1k0F8qg3Z8UAABNsN3TQ-0568.png-wh_50

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

wKioL1k0F-azghEqAABcDNrOyTw640.png

轉載於:https://blog.51cto.com/jiayimeng/1932127