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

时间:2015-10-25 17:12:33

标签: python python-2.7 function

这是python 2.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之后,数组[100, 200, 300]应该仍为change

我的问题如下:

  • 我做错了吗?我知道如何使用__main__相关。
  • 你们能告诉我“有线”行为吗?是否有任何术语/页面来描述python语言的这种行为?

对我来说,python的作用如下:

输入 - &gt;功能 - &gt;输出+输入_altered

但我认为它应该像:

输入 - &gt;功能 - &gt;输出+输入

1 个答案:

答案 0 :(得分:0)

如果您不想更改原始对象,请使用change(a[:])change(a.copy())