1. 准则
- 不可变对象作为函数参数,相当于c系语言的值传递
- 可变对象作为函数参数,相当于c系语言的引用传递
- 一旦函数中遇到=,就会重新开辟一个内存空间,不再对传递过来的参数有影响
2. 代码
# 1.对于不可变str处理
# 不可变对象作为函数参数,相当于c语言中的值传递;
# 所以传递进来的参数值跟本身的值无关
def change_str(param):
param+"2"
# 2.对于可变list处理
# 可变对象作为函数参数,相当于c语言中的引用传递
# 因为传递的是地址,所以对地址的改变会影响到本身
def change_list(param):
param.append("abc")
# 一旦函数中遇到"=",就会重新开辟一个内存空间,
# 不再对传递过来的参数有影响
# 所以本身的lisa不会被覆盖成['a','b','d']
param=['a','b','d']
num = "1"
print(f"num_before = {num}")
# num_before = 1
change_str(num)
print(f"num_after = {num}")
# num_after = 1
lisa = ["1","2"]
print(f"lisa_before = {lisa}")
# lisa_before = ['1', '2']
change_list(lisa)
print(f"lisa_after = {lisa}")
# lisa_after = ['1', '2', 'abc']