Python淺拷貝與深拷貝

Python淺拷貝與深拷貝

上一篇文章: Python文件夾處理
下一篇文章: Python==與is對比

一、淺拷貝

淺拷貝:拷貝了引用,沒有拷貝內容。

實例:segmentfault

a=[1,2,3]
b=a

print("a的id:",id(a))
print("b的id:",id(b))

a.append(4)
print(a)
print(b)

結果:app

a=[1,2,3]
b=a

print("a的id:",id(a))
print("b的id:",id(b))

a.append(4)
print(a)
print(b)

二、深拷貝

深拷貝:對於一個對象全部層次的拷貝(遞歸)。

使用copy.deepcopy()完成深拷貝code

實例:對象

import copy
a=[1,2,3]
b=[4,5,6]

c=[a,b]

d=c
e=copy.deepcopy(c)




print("c的值",c)
print("d的值",d)
print("e的值",e)

print("c的id:",id(c))
print("d的id:",id(d))
print("e的id:",id(e))

a.append(7)
print("c的值",c)
print("d的值",d)
print("e的值",e)

print("c的id:",id(c))
print("d的id:",id(d))
print("e的id:",id(e))

結果:遞歸

c的值 [[1, 2, 3], [4, 5, 6]]
d的值 [[1, 2, 3], [4, 5, 6]]
e的值 [[1, 2, 3], [4, 5, 6]]
c的id: 4329011592
d的id: 4329011592
e的id: 4333645768
c的值 [[1, 2, 3, 7], [4, 5, 6]]
d的值 [[1, 2, 3, 7], [4, 5, 6]]
e的值 [[1, 2, 3], [4, 5, 6]]
c的id: 4329011592
d的id: 4329011592
e的id: 4333645768

三、cope.cope()對可變類型和不可變類型影響不一樣

實例:get

import copy
a=[1,2,3]
b=copy.copy(a)

print("a的id:",id(a))
print("b的id:",id(b))

a.append(4)
print(a)
print(b)


#不可變類型
c=(1,2,3)
d=copy.copy(c)

print("c的id:",id(c))
print("d的id:",id(d))

結果:import

a的id: 4372057096
b的id: 4372055816
[1, 2, 3, 4]
[1, 2, 3]
c的id: 4372006736
d的id: 4372006736
相關文章
相關標籤/搜索