我遇到一个问题,当我将一个数组传递给一个函数时,数组的原始值被改变了。我下面的例子应该能阐明我的意思。
所以如果我有下落的例子:
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/