可以看看:http://www.cnblogs.com/yuyan/archive/2012/04/21/2461673.html
http://www.cnblogs.com/CheeseZH/p/5165283.html
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)。deepcopy比copy安全,因为不会保留内层引用(copy,内层引用可能会导致内层值被修改)
n皇后问题中,count是数,相当于值传递,无法改变。可以改成列表。