python 中,数据类型分为 可变(mutable) 和 不可变(unmutable)。 例如 integers, floats, strings, booleans, tuples 皆为 不可变的。 但 list 和 dictionaries 时可变的。 这意味着,当函数有 list 或者 dictionary 作为形参时, 会改变其 实参的值(在函数中若改动其值)。 (对比, 在c或者c++ 中,函数调用 发生的数据传递时单向的, 即, 只能把实参的值 传递给形参, 而不能把形参的值传给实参。在函数调用中, 形参的改动并不会影响实参。)
initial_list = [1, 2, 3]
def duplicate_last(a_list):
last_element = a_list[-1]
a_list.append(last_element)
return a_list
new_list = duplicate_last(a_list = initial_list)
print(new_list)
print(initial_list)
[1, 2, 3, 3]
[1, 2, 3, 3]
这种性质在某些情况下很有用, 但是 若不想 实参的值收到影响, 可以使用[].copy 方法。list 和dictionary 都有 copy 方法。
initial_list = [1, 2, 3]
def duplicate_last(a_list):
last_element = a_list[-1]
a_list.append(last_element)
return a_list
new_list = duplicate_last(initial_list.copy())
print(new_list)
print(initial_list)
[1, 2, 3, 3]
[1, 2, 3,]
参考: https://www./blog/tutorial-functions-modify-lists-dictionaries-python
|