python和引用

省时总结传参时,容器传入的是引用,而变量传入的是副本

 

准确地说,在 Python 中,所有传递给函数的参数都是引用。不过,如果参数是不可变对象(例如整数、字符串等),Python 会将这些对象的值复制一份,然后将副本传递给函数。当将一个可变对象传递给一个函数时,函数接收到的就是这个对象的引用,也就是说,它接收到的是指向这个对象的内存地址。因此,当您在函数中修改这个对象时,实际上是在修改同一个对象,而不是创建一个新的对象。

以下是一个例子,演示了如何在 Python 中使用引用:

# 定义一个函数,接收一个列表参数,并将列表的第一个元素设置为0
def modify_list(list_param):
    list_param[0] = 0

# 定义一个列表并传递给函数
my_list = [1, 2, 3]
modify_list(my_list)

# 输出修改后的列表
print(my_list)  # 输出 [0, 2, 3]

在上面的代码中,定义了一个函数modify_list(),它接收一个列表参数,并将列表的第一个元素设置为0。然后,定义了一个名为my_list的列表,并将其传递给函数modify_list()。由于函数接收到的是my_list的引用,因此在函数中修改my_list的第一个元素时,实际上是修改了同一个列表对象。因此,最终输出的列表是[0, 2, 3],而不是[1, 2, 3]。

需要注意的是,当您传递一个不可变对象(例如整数、字符串等)时,函数接收到的不是对象本身的引用,而是一个新的对象副本。因此,在函数中修改这个对象不会影响原始对象。

 

Python 中的不可变对象包括整数、浮点数、字符串、元组等。这些对象在创建后不可修改,如果您试图修改它们,Python 将会创建一个新的对象。例如,以下代码演示了尝试修改字符串的错误方式:

s = "hello"
s[0] = "H"  # 这里尝试修改字符串的第一个字符,但会引发 TypeError 错误

在上面的代码中,尝试将字符串s的第一个字符修改为"H",但会引发 TypeError 错误,因为字符串是不可变对象,无法修改。

需要注意的是,虽然整数和字符串是不可变对象,但您可以对它们进行运算和连接等操作,这些操作将返回一个新的对象。例如,以下代码演示了对整数进行运算和连接操作的示例:

a = 10
b = a + 5  # 运算操作将返回一个新的整数对象
s = "hello"
s2 = s + "world"  # 连接操作将返回一个新的字符串对象

在上面的代码中,将整数a加上5将返回一个新的整数对象b,将字符串s连接上"world"将返回一个新的字符串对象s2。

posted @ 2023-02-24 10:52  WTSRUVF  阅读(40)  评论(0编辑  收藏  举报