• Python 何时传的是值,何时传的是引用?


    在 Python 中,参数的传递方式可以是传值(pass by value)或传引用(pass by reference)。然而,实际上 Python 中的参数传递方式是通过对象的引用进行传递。简单来说,当传递不可变对象时(如数字、字符串、元组等),Python 采用的是传值的方式,即创建了对象的副本,并将副本传递给函数或赋值给其他变量。这意味着在函数内部修改参数的值不会影响到原始对象。然而,当传递可变对象时(如列表、字典、集合等),Python 采用的是传引用的方式,即传递的是对象的引用(内存地址),而不是对象的副本。这意味着在函数内部对参数对象的修改会影响到原始对象。

    1. def modify_value(num):
    2. num = 10 # 修改了参数的值
    3. print(num)
    4. x = 5
    5. modify_value(x) # 输出 10
    6. print(x) # 输出 5,原始对象未受影响
    7. def modify_list(lst):
    8. lst.append(4) # 修改了参数对象
    9. print(lst)
    10. my_list = [1, 2, 3]
    11. modify_list(my_list) # 输出 [1, 2, 3, 4]
    12. print(my_list) # 输出 [1, 2, 3, 4],原始对象被修改

    需要注意的是,虽然 Python 中的参数传递方式是通过对象引用进行的,但实际上并不涉及指针的操作。因此,我们可以将参数传递方式描述为"按对象引用传递",而不是传统意义上的"按引用传递"。

    此外,对于不可变对象,例如元组,尽管不能直接修改其值,但可以通过重新赋值变量来改变引用的对象。这样的操作会生成一个新的对象,并将变量重新指向新的对象。

    1. def modify_tuple(tpl):
    2. tpl = (4, 5, 6) # 重新赋值变量,生成新的元组对象
    3. print(tpl)
    4. my_tuple = (1, 2, 3)
    5. modify_tuple(my_tuple) # 输出 (4, 5, 6)
    6. print(my_tuple) # 输出 (1, 2, 3),原始对象未受影响

    总结而言,Python 的参数传递方式是通过对象引用进行的,对于不可变对象是传值的方式,对于可变对象是传引用的方式。

  • 相关阅读:
    vue3中组件切换
    【源码】Vue.js 官方脚手架 create-vue 是怎么实现的?
    TLS回调函数
    判断是否相等 hasChanged
    从入局到破局:商家怎样挖掘视频号的新增量?
    torch_cluster、torch_scatter、torch_sparse三个包的安装
    肠道重要菌属——嗜胆菌属 (Bilophila)喜欢脂肪、耐胆汁的促炎菌
    人均瑞数系列,瑞数 6 代 JS 逆向分析
    回溯--组合,排列
    8万字带你入门Rust
  • 原文地址:https://blog.csdn.net/m0_37738114/article/details/133773381