1. 程式人生 > >python----函數調用 值的問題

python----函數調用 值的問題

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 board
print_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----函數調用 值的問題