數(shù)據(jù)類型總結(jié),深淺拷貝
存一個(gè)值還是多個(gè)值
- 一個(gè)值:整型,浮點(diǎn)型,字符串
- 多個(gè)值:列表,元祖,字典,集合
有序 or 無(wú)序
- 有序:字符串,列表,元祖
- 無(wú)序:字典,集合
可變 or 不可變
可變:列表,字典,集合
不可變:整型,浮點(diǎn)型,字符串
淺拷貝和深拷貝的區(qū)別(只針對(duì)可變類型)
1.拷貝:
lis = [1,2,3,4]
lis2 = lis
lis.append(5)
print(lis)
print(lis2)
[1, 2, 3, 4, 5]
[1, 2, 3, 4, 5]
2.淺拷貝
import copy
lis = [1,[3, 4]]
lis2 = copy.copy(lis)
print(lis)
print(lis2)
lis.append(2)
print(lis)
print(lis2)
lis[1].append(5)
print(lis)
print(lis2)
[1, [3, 4]]
[1, [3, 4]]
[1, [3, 4], 2]
[1, [3, 4]]
[1, [3, 4, 5], 2]
[1, [3, 4, 5]]
3.深拷貝
l1 = [1, [2, 3]]
l2 = copy.deepcopy(l1)
print(l1)
print(l2)
l1.append(2)
print(l1)
print(l2)
l1[1].append(5)
print(l1)
print(l2)
[1, [2, 3]]
[1, [2, 3]]
[1, [2, 3], 2]
[1, [2, 3]]
[1, [2, 3, 5], 2]
[1, [2, 3]]
總結(jié):
這些只是一個(gè)現(xiàn)象
拷貝:共用一片內(nèi)存,l1發(fā)生改變則l2也會(huì)發(fā)生改變,因?yàn)閘1是可變類型
淺拷貝:另外開辟內(nèi)存,共用其中元素的地址,當(dāng)l1內(nèi)部的不可變對(duì)象發(fā)生改變時(shí),l2不發(fā)生改變,因?yàn)樵撛氐牡刂纷兞?當(dāng)l1內(nèi)部的可變對(duì)象發(fā)生了改變時(shí),l2隨之改變,因?yàn)榈刂凡蛔?/p>
深拷貝;另外開辟內(nèi)存,共用元素中不可變對(duì)象的地址,l1改變,l2不變,兩者互相獨(dú)立,沒(méi)有太大的關(guān)系