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

标签 python arrays function

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

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

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[:]
    # ...

关于python - 为什么这个数组的值在作为参数传递给函数时会发生变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31636767/

相关文章:

python - 如果 MySQL 正在运行,如何在 ubuntu 上用 python 找出?

python - 如何通过python将多页数据导出到excel?

c++ - 取消引用数组地址不起作用?

python - 将核苷酸转换为相应的 DNA 序列

javascript - 在函数对象中分配函数而不调用函数本身

python - 在requirements.txt 文件中使用 "-t"选项

python - ioctl 数字与 C ioctl 数字不同吗?

arrays - CUDA 共享内存不比全局快?

c - 如何使用 Microsoft Visual C++ IDE 获取变量的固定地址?

arrays - 在函数中向数组添加元素,但数组仍为空