标签:值传递 log this ack python eps list using code
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,内层引用可能会导致内层值被修改)
标签:值传递 log this ack python eps list using code
原文地址:http://www.cnblogs.com/kprac/p/7774119.html