当前位置: 首页 > article >正文

python中的值传递和引用传递

可参考链接:Python3 函数 | 菜鸟教程 (runoob.com)

在Python中,参数传递可以被视为一种"传值"机制,但这种"传值"与一些其他语言中的传值有所不同,特别是涉及到可变和不可变类型时。以下是对Python中值传递和引用传递的详细解释:

值传递(Immutable Objects)

对于不可变类型(如整数、浮点数、字符串、元组等),当你将它们作为参数传递给函数时,实际上是传递了它们的值的一个副本。这意味着函数接收到的是这个值的副本,而不是原始对象的引用。因此,函数内部对这个参数的修改不会影响到原始对象。

def modify_value(a):
    a = 10

x = 5
modify_value(x)
print(x)  # 输出: 5

在这个例子中,函数modify_value修改了参数a的值,但这个修改不影响原始变量x,因为ax值的一个副本。

引用传递(Mutable Objects)

对于可变类型(如列表、字典、集合等),当你将它们作为参数传递给函数时,实际上是传递了它们的引用的副本。这个引用指向内存中相同的对象。因此,如果你通过这个引用修改了对象,这种修改会影响到所有引用这个对象的变量。

示例:

def modify_list(lst):
    lst.append(4)

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

在这个例子中,my_list被传递给函数modify_list,函数内部对列表进行了修改。由于列表是可变的,这个修改也反映在了原始的my_list上。

重要区别

  • 不可变类型:函数内部对参数的修改不会影响原始对象,因为参数是原始值的副本。
  • 可变类型:函数内部对参数的修改会影响原始对象,因为参数是指向原始对象的引用的副本。


http://www.kler.cn/a/287421.html

相关文章:

  • 已有docker增加端口号,不用重新创建Docker
  • 机器学习3
  • day-17 反转字符串中的单词
  • 【ASR技术】WhisperX安装使用
  • 2024-11-17 -MATLAB三维绘图简单实例
  • 【AI日记】24.11.17 看 GraphRAG 论文,了解月之暗面
  • 城投公司相关指标数据(2023.8)
  • springboot+vue 进销存管理系统
  • 一起学习LeetCode热题100道(61/100)
  • 计算图像分割mask的灰度级个数、以及删除空的分割数据
  • HTML静态网页成品作业(HTML+CSS)——动漫猫和老鼠网页(1个页面)
  • 快速安全部署 Tomcat
  • 全志Linux磁盘操作基础命令
  • 程序化交易在中国的规模
  • 云计算实训39——Harbor仓库的使用、Docker-compose的编排、YAML文件
  • 什么场景可以使用函数式接口
  • 【数据结构】线性表的链式表示(单链表)
  • 《C++20 特性综述》
  • Matlab实现人工神经网络
  • 基于Java+SpringBoot+Vue的汽车销售网站
  • 【Python123题库】#统计文章字符数 #查询高校信息 #查询高校名
  • linux系统中USB模块鼠标驱动实现
  • PostgreSQL主从同步介绍
  • 【Kubernetes知识点问答题】Docker CE 部署
  • 【网络安全】绕过输入验证
  • 【国铁采购平台-注册安全分析报告-无验证方式导致安全隐患】