为什么python自定义函数的参数本身会被更改?

为什么python自定义函数的参数本身会被更改?,python,python-2.7,function,Python,Python 2.7,Function,这是Python2.7.10 我举一个例子来说明我的问题。我通过一个函数交换数组的第一个和第二个元素 #!/usr/bin/python def change(array): array2 = array array2[0], array2[1] = array2[1], array2[0] return array2 a = [100, 200, 300] print "Original array: " print a #[100, 200, 300] print

这是Python2.7.10

我举一个例子来说明我的问题。我通过一个函数交换数组的第一个和第二个元素

#!/usr/bin/python
def change(array):
    array2 = array
    array2[0], array2[1] = array2[1], array2[0]
    return array2


a = [100, 200, 300]
print "Original array: "
print a #[100, 200, 300]
print "Feeding to some function"
b = change(a)
print "Original array becomes: "
print a #[200, 100, 300] <- Unexpected
print "Result of my function: "
print b #[200, 100, 300]
我认为该函数不应改变馈入参数的值/状态。换句话说,在运行函数更改后,数组a应该仍然是[100200300]

我的问题如下:

我做错了吗?我知道如何使用相关的。 你们能给我介绍一下有线行为吗?是否有任何术语/页面来描述python语言的这种行为? 对我来说,python的工作原理如下:

输入->功能->输出+输入

但我认为它应该像这样工作:


输入->功能->输出+输入

如果您不想更改原始对象,请使用changea[:]或changea.copy。

谢谢您的回答。我正在试图理解python到底发生了什么。例如在语言方面。mychange@Puriney:Jack在上一次会议上的回答解释了为什么在Python中会发生这种情况。如果您想了解更多信息,请参阅Ned Batchelder。可能是的副本