python函数参数的不同

在运用python的过程中,发现当函数参数为list的时候,在函数内部调用list.append()会改变形参,与c/c++的不太一样,查阅相关资料,在这里记录一下。

python中id可以获取对象的内存地址

>>> num1 = 10>>> num2 = num1>>> num3 = 10>>> id(num1)4299190320>>> id(num2)4299190320>>> id(num3)4299190320

登录后复制

可以看到num1、num2、num3三个对象指向的是一个地址,python在这里采用的是一种叫做引用计数的方式来完成的,很类似C++zhong的智能指针,变量赋值给变量相当于同一对象引用计数器+1,而不是重新分配空间。

对于list对象可以看到下面的结果:

>>> list1 = [,>>> list2 = [,>>> >>> 4302498128

登录后复制

list1与list3指向同一空间,list2指向另外的一处地址。

立即学习“Python免费学习笔记(深入)”;

python中的函数传参是对象传递,同时也存在局部与全局的问题,在传参过程中存在两个规则:

通过引用将参数复制到局部作用域的对象中,意味着被用来访问函数参数的变量于提高给函数的对象无关,因为存在一个复制问题,这和C语言是相同的。而且修改局部对象不会改变原始数据。

可以在适当位置修改可变对象。可变对象主要就是列表和字典,这个适当位置实质上就是前面分析的局部子对象的修改不会改变字典对象或者列表对象的ID

def incrInt(num):    pId(num)    num += 1;    pId(num)def incrList(listArg):    pId(listArg)    listArg.append(1);    pId(listArg)def pId(arg):    print id(arg)num1 = 10pId(num1)incrInt(num1)print(num1)list1 = [0,2]pId(list1)incrList(list1)print(list1)

登录后复制

结果如下:

 python test.py42991819044299181904429918188010433697991243369799124336979912[0, 2, 1]

登录后复制

可以看到在函数内部,改变int的数值,则num指向了另一块内存地址,而修改list,则是在同一块内存地址。

在python中,对象可分为可变(mutable)和不可变(immutable)两种类型,元组(tuple)、数值型(number)、字符串(string)均为不可变对象,而字典型(dictionary)和列表(list)的对象是可变对象。

所以在传参过程中要注意下。

以上就是python函数参数的不同的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2272196.html

(0)
上一篇 2025年2月27日 12:42:54
下一篇 2025年2月24日 23:45:58

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • python发送邮件

    python发送邮件 准备 python中发送邮件主要用的是smtplib和email两个模块,下面主要对这两个模块进行讲解 在讲解之前需要准备至少两个测试的邮箱,其中要在邮箱的设置中开启smtplib协议才可以进行发送和接受 smtpli…

    编程技术 2025年2月27日
    200
  • Python客户端与服务端的简单网络编程示例

    这篇文章主要介绍了python简单网络编程,详细介绍了客户端与服务端的具体实现技巧与相关注意事项,需要的朋友可以参考下 本文实例讲述了Python简单网络编程。分享给大家供大家参考,具体如下: 内容目录 1. 客户端(client.py)2…

    编程技术 2025年2月27日
    200
  • 如何利用Python在运算后得到浮点数值的方法详解

    在python中进行两个整数相除的时候,在默认情况下都是只能够得到整数的值,而在需要进行对除所得的结果进行精确地求值时,想在运算后即得到浮点值,那么如何进行处理呢? 1、修改被除数的值为带小数点的形式即可得到浮点值,这种方法在被除数事先知道…

    编程技术 2025年2月27日
    200
  • python多进程快还是多线程快?

    下面小编就为大家带来一篇python多进程和多线程究竟谁更快(详解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧 python3.6 threading和multiprocessing 四核+三星250G-…

    2025年2月27日
    200
  • 关于Python安装官方whl包和tar.gz包的方法详解(收藏)

    下面小编就为大家带来一篇python安装官方whl包和tar.gz包的方法(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧 Windows环境:   安装whl包:pip install wheel  …

    编程技术 2025年2月27日
    200
  • Python递归函数的定义与用法的实例分析

    这篇文章主要介绍了python递归函数定义与用法,结合具体实例形式分析了python递归函数的原理、实现技巧与相关注意事项,需要的朋友可以参考下 本文实例讲述了Python递归函数定义与用法。分享给大家供大家参考,具体如下: 递归函数 在函…

    编程技术 2025年2月27日
    200
  • 基于http请求与响应实现的网页源码读取的相关操作技巧

    这篇文章主要介绍了python实现的下载网页源码功能,涉及python基于http请求与响应实现的网页源码读取功能相关操作技巧,需要的朋友可以参考下 本文实例讲述了Python实现的下载网页源码功能。分享给大家供大家参考,具体如下: #!/…

    2025年2月27日
    200
  • 分享python中鸭子类和多态实例

    下面小编就为大家带来一篇老生常谈python之鸭子类和多态。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧 一、 什么是多态 一种类型具有多种类型的能力允许不同的对象对同一消息做出灵活的反应以一种通用的方式对待…

    编程技术 2025年2月27日
    200
  • Python模拟登陆实例详解

    本篇文章主要介绍了python模拟登陆实现代码,这里整理了详细的代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 下面分享一个使用Python进行网站模拟登陆的小例子。 原理 使用Cookie技术,绕开网站登录验证。要使用到cooki…

    2025年2月27日
    200
  • Python字符串处理实例详解

    这篇文章主要为大家详细介绍了python字符串处理实现单词反转的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 Python字符串处理学习中,有一道简单但很经典的题目,按照单词对字符串进行反转,并对原始空格进行保留: 如:‘ I l…

    编程技术 2025年2月27日
    200

发表回复

登录后才能评论