【补充】Python中的参数传递是值传递还是引用传递

发布时间 2023-07-25 16:08:17作者: Chimengmeng

【补充】Python中的参数传递是值传递还是引用传递

  • Python中的参数传递都是copy一份传递过去,由于一切皆对象,传过去的都是地址
  • 在Python中又区分可变类型和不可变类型
    • 可变类型在函数中修改会影响原始的值
    • 不可变类型,不会影响原始的值

在Python中,参数传递是按对象引用传递的方式进行的,也可以称为"传对象引用"。

  • 这意味着在函数调用时
    • 参数的值不是直接传递给函数
    • 而是传递了对象的引用(内存地址)。
  • 当我们将一个对象作为参数传递给函数时
    • 实际上传递的是该对象的引用(内存地址)。
    • 函数内部可以通过该引用来访问和操作原始对象。
  • 需要注意的是
    • Python的对象分为可变(mutable)和不可变(immutable)两种类型。
      • 对于不可变类型的对象(如整数、字符串、元组等)
      • 无论是在函数内还是外部对它们进行修改
      • 都会创建新的对象。
      • 因此,看起来像是通过值传递。
    • 对于可变类型的对象(如列表、字典等)
      • 在函数内部对它们的修改会影响到原始对象的值
      • 因为它们在内存中是可变的
      • 而函数传递的是对象的引用。
  • 下面通过示例代码演示参数传递的方式:
def update_list(lst):
    lst.append(4)

my_list = [1, 2, 3]
update_list(my_list)
print(my_list)  # 输出 [1, 2, 3, 4]

def update_string(str):
    str += " World"

my_str = "Hello"
update_string(my_str)
print(my_str)  # 输出 "Hello"

  • 在第一个示例中
    • 我们将一个列表对象传递给函数
    • 并在函数内部修改了该列表。
    • 这种修改会反映到原始列表对象上。
  • 而在第二个示例中
    • 我们将一个字符串对象传递给函数
      • 并在函数内部进行了字符串拼接操作。
    • 虽然函数内部的操作看起来修改了字符串
      • 但实际上是重新创建了一个新的字符串对象
      • 并没有改变原始的字符串对象。

综上所述,可以说Python的参数传递是按对象引用传递的方式进行的,具体表现根据对象的可变性而定。