首页 > 编程语言 >python中参数传递是值传递还是引用传递

python中参数传递是值传递还是引用传递

时间:2023-11-06 09:33:54浏览次数:29  
标签:参数传递 函数 python 内存空间 传递 对象 print

一,值传递和引用传递的区别是什么

 

值传递和引用传递在内存空间上的主要区别在于参数的存储方式。

值传递(Pass by value)在函数调用时,会创建一个新的内存空间来存储传递的参数值。也就是说,在函数内部对参数的任何修改都仅限于这个新的内存空间,不会影响到原始参数的内存空间。当函数返回时,这个新的内存空间会被销毁。

引用传递(Pass by reference)则不同,它直接使用原始参数的内存地址,没有创建新的内存空间。因此,在函数内部对参数的任何修改都会直接影响到原始参数的内存空间。这种机制使得引用传递在处理大型对象时更加高效,因为它可以避免在函数调用时复制整个对象。当函数返回时,原始参数的内存空间不会被销毁。

 

 

二,python里的参数传递是什么传递

 

1. 不可变对象的参数传递是值传递,因为开辟了新的内存空间

当我们将一个不可变对象作为参数传递给函数时,函数内部无法改变这个对象自身。函数如果对这个参数进行改变,实际上是创建了一个新的对象。

def change(n):
    print(id(n))
    n = 1000
    print(id(n))

x = 3
print(id(x))
change(x)
print(x)

 

在这个例子中,函数 change() 试图改变参数 n。但是因为 n 是一个不可变对象,所以函数内部其实创建了一个新的对象,而原来的对象并没有改变。

2. 可变对象的参数传递是引用传递,因为没有开辟新的内存空间

当我们将一个可变对象作为参数传递给函数时,函数内部可以改变这个对象自身。

def change(n):
    print(id(n))
    n.append(4)

x = [1, 2, 3]
print(id(x))
change(x)
print(x)

 

在这个例子中,函数 change() 改变了参数 n。因为 n 是一个可变对象,所以函数内部的改变影响到了原来的对象。

标签:参数传递,函数,python,内存空间,传递,对象,print
From: https://www.cnblogs.com/chaojiyingxiong/p/17811834.html

相关文章

  • QT删除python中的单行注释
    python中的#号可能存在于字符串中:print("'asd#f'00#0",'#1“23') #这里才开始注释没想到用什么正则来删除python中的单行注释所以解决方案为:QStringremoveLineComment(QStringsLine){qDebug()<<"removeLineComment:"<<sLine;QStringsRes......
  • python语法糖之map函数
    一,map函数是干什么的 map()函数是Python中的一个内置函数,它接收一个函数和一个或多个可迭代对象作为输入,然后返回一个由输入可迭代对象的每个元素或子序列组成的迭代器。简单来说,map()函数用于将一个函数应用于可迭代对象的每个元素或子序列,并返回包含结果的迭代器。例如,如果......
  • 如何按字典中的值对Python中的字典列表进行排序?
    内容来自DOChttps://q.houxu6.top/?s=如何按字典中的值对Python中的字典列表进行排序?如何按特定键的值对字典列表进行排序?给定:[{'name':'Homer','age':39},{'name':'Bart','age':10}]当按name排序时,它应该变成:[{'name':'Bart�......
  • 把对象传递到Thisdrawing.SendCommand的参数中去
    VBA不像lisp可以随意在命令行参数中传递对象,但可以采取如下方法:DimobjasAcadXXXDim ObjHandleasString……'将对象句柄转换成lisp表达式字符串,传递过去ObjHandle = "(list(handent" & Chr(34) & obj.Handle & Chr(34) & "))" ThisDrawing.SendCommand ("......
  • Python自带web服务
    Python自带web服务1、python自带帮助文档,方便查询。python-mpydoc-p80002、在当前目录下启动一个Web服务python-mhttp.server8000网页可以查看当前目录结构,文件。这个有时候打开本地html,测试JS跨域可以使用,因为现在大部分浏览器文件打开网页,都默认禁止跨域......
  • Python OpenCV 形态学应用—图像开运算与闭运算
    ✅作者简介:热爱科研的算法开发者,Python、Matlab项目可交流、沟通、学习。......
  • 2.python-pandas-axis的理解
    参考:python数据分析-如何理解pandas中的axis?-知乎](https://zhuanlan.zhihu.com/p/444973350)1.对Seriesaxis只有一个,默认为axis=02.对DataFrameaxis有俩,axis=1和axis=0.axis=1:'columns',表示将行固定,对每一行按列遍历。axis=0:'index',表示将列固定,对每......
  • Python 用户输入和字符串格式化指南
    Python允许用户输入数据。这意味着我们可以向用户询问输入。在Python3.6中,使用input()方法来获取用户输入。在Python2.7中,使用raw_input()方法来获取用户输入。以下示例要求用户输入用户名,并在输入用户名后将其打印在屏幕上:Python3.6:username=input("请输入用户名......
  • Python基础知识
    1.python单行注释用#例如:#helloworld2.多行注释用""""""来表示例如:"""helloworld"""3.print语句:(1)输出多个数据格式:print(内容一,内容二,内容三,......)(2)print语句默认输出后换行(3)print语句输出不换行的语法:print("内容",end='......
  • Python 用户输入和字符串格式化指南
    Python允许用户输入数据。这意味着我们可以向用户询问输入。在Python3.6中,使用input()方法来获取用户输入。在Python2.7中,使用raw_input()方法来获取用户输入。以下示例要求用户输入用户名,并在输入用户名后将其打印在屏幕上:Python3.6:username=input("请输入用户......