在 Python 中,当你将一个列表作为参数传递给一个函数时,实际上传递的是列表的引用(即内存地址),而不是列表的副本。这意味着在函数内部对列表的操作会直接影响到原始列表的内容。
当你将列表a传递给函数f时,函数f内部对a进行了修改,这个修改会直接作用在原始列表a所指向的内存地址上。因此,当函数f执行完毕后,原始列表a的内容发生了变化。这种行为被称为“引用传递”。
如果你想要避免修改原始列表的内容,可以在函数内部创建一个新的列表,并在函数内部操作这个新列表,而不是直接修改原始列表。
可参考代码:
def f(input_list):
new_list = input_list.copy() # 创建原始列表的副本
# 在新列表上进行操作,而不是直接修改原始列表
new_list.append('new_value')
return new_list
a = [1, 2, 3]
new_a = f(a)
print(a) # 原始列表a没有变化
print(new_a) # 新列表new_a包含了修改后的内容
通过这种方式,你可以避免函数内部对原始列表进行修改而影响到原始列表的内容。
※当然,如果你想在函数外面,直接使用修改后的列表。就不用copy了。