流暢的python學習筆記-第8章

第8章-對象引用、可變性和垃圾回收

[toc]html

淺拷貝

copy 淺複製,不會拷貝其子對象,修改子對象,將受影響python

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

print("id a=", id(a))  # id a= 1669348705224
print("id b=", id(b))  # id b= 1669348161608

print("id a 0=", id(a[0]))  # id a 0= 1586588704
print("id b 0=", id(b[0]))  # id b 0= 1586588704

a[0] = "hello"
print("new a=", a)  # new a= ['hello', 2, 3]
print("new b=", b)  # new b= [1, 2, 3]

b[0] = "world"
print("new 2 a=", a)  # new a= ['hello', 2, 3]
print("new 2 b=", b)  # new 2 b= ['world', 2, 3]


深拷貝

deepcopy 深複製,將拷貝其子對象,修改子對象,將不受影響調試

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

print("id a=", id(a))  # id a= 2760920581064
print("id b=", id(b))  # id b= 2760920037448

print("id a 0=", id(a[0]))  # id a 0= 1586588704
print("id b 0=", id(b[0]))  # id b 0= 1586588704

a[0] = "hello"
print("new a=", a)  # new a= ['hello', 2, 3]
print("new b=", b)  # new b= [1, 2, 3]

b[0] = "world"
print("new 2 a=", a)  # new a= ['hello', 2, 3]
print("new 2 b=", b)  # new 2 b= ['world', 2, 3]

二者區別

發現對於不可變對象,好比整數、字符串、元組、還有由這些不可變對象組成的集合對象,淺拷貝和深拷貝沒有區別,都是拷貝一個新對象code

二者的區別在於拷貝組合對象,好比列表中還有列表,字典中還有字典或者列表的狀況時,淺拷貝只拷貝了外面的殼子,裏面的元素並無拷貝,而深拷貝則是把殼子和裏面的元素都拷貝了一份新的。htm

看一個例子:對象

import copy

a = [0, [1, 2], 3]
b = copy.copy(a)
c = copy.deepcopy(a)

c[1][0] = "hello"
print("a=", a)  # a= [0, [1, 2], 3]
print("c=", c)  # c= [0, ['hello', 2], 3]

b[1][0] = "world"

print("new a=", a)  # new a= [0, ['world', 2], 3]
print("new b=", b)  # new b= [0, ['world', 2], 3]


小提示:字符串

能夠利用 python在線調試進行相關調試分析
相關文章
相關標籤/搜索