python----函數調用 值的問題
阿新 • • 發佈:2017-11-02
zeros col rec -- code before oar [0 con
import numpy as np def build_chessboard(N): chessboard = np.zeros((N,N)) return chessboard def print_chessboard(chessboard): N = len(chessboard) for r in range(N): for c in range(N): if chessboard[r,c] == 1: print (‘Q‘, end="")else: print (‘.‘, end="") print () print () # generate an empty 4x4 chessboard: chessboard = build_chessboard(4) print (chessboard) # Place 4 non-attacking queens on this board chessboard[1,0] = 1 chessboard[3,1] = 1 chessboard[0,2] = 1 chessboard[2,3] = 1 # Pretty print the resulting boardprint_chessboard(chessboard) def test(cb): cb[0, 0] = 1 print_chessboard(cb) chessboard = build_chessboard(4) print_chessboard(chessboard) test(chessboard.copy()) # try chessboard.copy() instead print_chessboard(chessboard) # oooops! def test(b): b = b + 1 print(b) n = 1 print(n) test(n) print(n) import copy def test(b): b.append(1) print(b) n = [1, 2, 3] print(n) test(copy.copy(n)) print(n) test(n) print(n) a=[] copy.deepcopy(a) import copy # copy makes a copy of the outer-most object, but keeps the same references to the inner # object. a=[2,4,[6]] print ("before: a=", a) b=copy.copy(a) b[0]+=1 b[2][0]+=1 print ("after: a=",a," b=", b, " (using copy)") # deepcopy also makes a copy of each contained element (recursively) a=[2,4,[6]] b=copy.deepcopy(a) b[0]+=1 b[2][0]+=1 print ("after: a=",a," b=", b, " (using deepcopy)")
總結一下:函數調用不可以改變原值(類似值傳遞的時候),但可以改變原list(append) 。deepcopy比copy安全,因為不會保留內層引用(copy,內層引用可能會導致內層值被修改)
python----函數調用 值的問題