python改变或不改变函数的输入参数内容
python的函数能像C语言指针一样改变输入参数指向的内容吗?
看一个例子:
#python
#改变或不改变函数的输入参数内容
def change_list(l1, l2):
l1.append("append")
l2 = l2 + ["append"]
print("l1:", l1)
print("l2:", l2)
return None
list1 = ["list1"]
list2 = ["list2"]
change_list(list1, list2)
print("----------------------------")
print("list1:", list1)
print("list2:", list2)
运行结果:

从运行结果看,执行函数前后,list1的内容发生了变化,list2的内容没有变。
在函数change_list()里面: l1.append是往列表里追加一个元素,l1列表的内容发生了变化,会导致函数外面的列表内容也跟着一起变。
l2 = l2 + [“append”] 虽然也是在l2列表里追加一个元素,但是等号左边的l2和输入参数l2不是同一个对象,不会导致函数外面的列表发生变化。
可以通过print(id(l1))和print(id(l2))来调试,会发现l2的id前后并不一样。
答案是:python可以像C语言指针一样改变输入对象的内容,但有一定的限定条件。
如果想要改变输入参数的内容,需要参数对象本身有改变自身的能力(函数),比如list.append()
如果不想改变输入参数的内容,可以使用等号操作符返回一个新的对象,或者使用深拷贝copy.deepcopy(obj)返回一个新的对象。