最近在搗鼓python,前幾天看到一個文章寫的關於淺拷貝和 深拷貝,轉載一下其中的實例:python
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']]
這個實例很簡明扼要,爲甚要說這個問題呢?由於今天在一個坑裏搗鼓好久,最後跟蹤發現原來是這個問題。先上僞代碼(代碼不在本機上,沒現成的):
arr
function1()
global arr_1
arr_1 = arr
return arr_1 //升序
function2()
global arr_2
arr_2 = arr
return arr_2 //降序
在個function內部arr_1 和arr_2print出來都是ok的
在main函數print上述兩個值則是同樣的
經過print,發如今function2中對arr作處理的時候,arr_1就變了。
對照文章開始的實例便可知緣由了