码迷,mamicode.com
首页 > 编程语言 > 详细

python----函数调用 值的问题

时间:2017-11-02 21:25:21      阅读:186      评论:0      收藏:0      [点我收藏+]

标签:值传递   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,内层引用可能会导致内层值被修改)

python----函数调用 值的问题

标签:值传递   log   this   ack   python   eps   list   using   code   

原文地址:http://www.cnblogs.com/kprac/p/7774119.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!