Python淺拷貝與深拷貝

Mark發表於2019-02-16

Python淺拷貝與深拷貝

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

1、淺拷貝

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

例項:

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

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

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

結果:

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

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

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

2、深拷貝

深拷貝:對於一個物件所有層次的拷貝(遞迴)。

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

例項:

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

3、cope.cope()對可變型別和不可變型別影響不同

例項:

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))

結果:

a的id: 4372057096
b的id: 4372055816
[1, 2, 3, 4]
[1, 2, 3]
c的id: 4372006736
d的id: 4372006736

相關文章