Skip to main content
 首页 » 编程设计

python之为什么这个数组的值在作为参数传递给函数时会发生变化

2025年05月04日17sxdcgaq8080

我遇到一个问题,当我将一个数组传递给一个函数时,数组的原始值被改变了。我下面的例子应该能阐明我的意思。

所以如果我有下落的例子:

def swap(array): 
    while True: 
        noChange = True 
        for i in range(len(array) - 1): 
            if array[i] > array[i + 1]: 
                array[i], array[i + 1] = array[i + 1], array[i] 
                noChange = False 
        if noChange: 
            return array 
 
def baseline(array): 
    array = sorted(array) 
    return array 
 
array = [20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0] 
sortedArray = swap(array) 
print array # Result: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20] 
array = [20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0] 
sortedArray = baseline(array) 
print array # Result: [20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0] 

从上面可以看出,由于某种原因,array 在运行名为 swap 的函数时发生了变化,但是当我运行 baseline 时>。在名为 swap 的函数中,我尝试将 array 的所有实例重命名为 localArray 以查看是否有所不同,但我'我仍然遇到同样的问题。

我确定这是非常明显的事情,但我已经看过了,但有人能解释为什么会这样吗?

请您参考如下方法:

当您将列表 array 传递给函数时,参数引用同一个列表对象,如果它在函数内部被修改,原始列表也会被修改。

如果这不是您想要的,请复制函数开头的列表:

def swap(array): 
    array = array[:] 
    # ...