python的淺拷貝和深copy

最近在搗鼓python,前幾天看到一個文章寫的關於淺拷貝和 深拷貝,轉載一下其中的實例:python

import  copy
=  [ 1 2 3 4 , [ ' a ' ' b ' ]]   # 原始對象

=  a   # 賦值,傳對象的引用
=  copy.copy(a)   # 對象拷貝,淺拷貝
=  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就變了。
對照文章開始的實例便可知緣由了
相關文章
相關標籤/搜索