Python中的對象之間賦值時是按引用傳遞的,若是須要拷貝對象,須要使用標準庫中的copy模塊。數組
1. copy.copy 淺拷貝 只拷貝父對象,不會拷貝對象的內部的子對象。
2. copy.deepcopy 深拷貝 拷貝對象及其子對象
一個很好的例子:
app
import
copy
a
=
[
1
,
2
,
3
,
4
, [
'
a
'
,
'
b
'
]]
#
原始對象
b
=
a
#
賦值,傳對象的引用
c
=
copy.copy(a)
#
對象拷貝,淺拷貝
d
=
copy.deepcopy(a)
#
對象拷貝,深拷貝
a.append(
5
)
#
修改對象a
a[
4
].append(
'
c
'
)
#
修改對象a中的['a', 'b']數組對象
print
'
a =
'
, a
print
'
b =
'
, b
print
'
c =
'
, c
print
'
d =
'
, d
輸出結果:
a = [1, 2, 3, 4, ['a', 'b', 'c'], 5]
b = [1, 2, 3, 4, ['a', 'b', 'c'], 5]
c = [1, 2, 3, 4, ['a', 'b', 'c']]
d = [1, 2, 3, 4, ['a', 'b']]spa
注意:還有一種淺拷貝的方式,就是使用相似於 a = set(a)這種格式,即複製列表L,使用list(L),要複製一個字典d,使用 dict(d),要複製一個集合s,使用set(s),這樣,咱們總結出一個規律,若是你要複製一個對象o,它屬於內建的類型t,那麼你能夠使用t(o) 來得到一個拷貝.dict也提供了一個複製版本,dict.copy,這個和dict(d)是同樣,我推薦你使用後者,這個使得代碼更一致,並且還少幾個字符.對象