python的参数传递是值传递还是引用传递?都不是

一. 值传递和引用传递理论

# 本质: python中独有的对可变不可变类型的区分.
# 值传递
如果函数收到的是一个不可变对象(数字、字符或元组)的引用,就不能直接修改原始对象--相当于通过‘值传递’来传递对象。

# 引用传递
如果函数收到的是一个可变对象(字典、列表)的引用,就能修改对象的原始值--相当于‘传引用’来传递对象

二. 值传递和引用传递代码

# 值传递 -> 不可变类型
name = 'yang'


def by_val(obj):
    name = 'cheng'
    return name

name1 = by_val(name)
print(name1 is name)  # False
print(name)   # yang
print(name1)  # cheng

# 引用传递 -> 可变类型
info = {'age': 18}


def by_ref(obj):
    """传地址"""
    obj['age'] = 19
    return obj


info1 = by_ref(info)
print(info1 is info)  # True
print(info)   # {'age': 19}
print(info1)  # {'age': 19}

理论参考: https://www.cnblogs.com/spring-haru/p/9320493.html

代码参考: https://www.cnblogs.com/shizhengwen/p/6972183.html

posted @ 2020-08-01 23:15  给你加马桶唱疏通  阅读(97)  评论(0编辑  收藏  举报