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。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
2021-02-24 A*算法