在运用php.cn/wiki/1514.html" target="_blank">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中的函数传参是对象传递,同时也存在局部与全局的问题,在传参过程中存在两个规则:通过引用将参数复制到局部作用域的对象中,意味着被用来访问函数参数的变量于提高给函数的对象无关,因为存在一个复制问题,这和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函数参数的作用是_python函数参数的不同相关推荐

  1. python函数参数的作用是_python函数参数理解

    1.位置参数 函数调用时,参数赋值按照位置顺序依次赋值. e.g. 1 deffunction(x):2 3return x *x4 5print function(2) 输出结果: 4 1 deff ...

  2. python函数的作用是_Python函数一

    函数 一.函数的作用 函数就是一段具有独立功能的代码块整合到一个整体并命名,在需要的位置调用这个名称即可完成对应的需求 函数在开发过程中,可以更高效的实现代码重用 二,函数的使用步骤 2.1 定义函数 ...

  3. python函数的目的与意义_Python函数__new__及__init__作用及区别解析

    [同] 二者均是Python面向对象语言中的函数,__new__比较少用,__init__则用的比较多. [异] __new__是在实例创建之前被调用的,因为它的任务就是创建实例然后返回该实例对象,是 ...

  4. python info函数的作用是_Python函数__new__及__init__作用及区别解析

    [同] 二者均是Python面向对象语言中的函数,__new__比较少用,__init__则用的比较多. [异] __new__是在实例创建之前被调用的,因为它的任务就是创建实例然后返回该实例对象,是 ...

  5. python函数中可变参数的传递方式是_Python函数可变参数定义及其参数传递方式实例详解...

    本文实例讲述了Python函数可变参数定义及其参数传递方式.分享给大家供大家参考.具体分析如下: python中 函数不定参数的定义形式如下: 1.func(*args) 传入的参数为以元组形式存在a ...

  6. python中的星号和乘号_Python 函数中参数前面一个和两个星号(**)的区别

    Python是一种计算机程序设计语言.是一种面向对象的动态类型语言,最初被设计用于编写自动化 脚本( shell),随着版本的不断更新和语言新功能的添加,越来越多被用于独立的.大型项目的开发. 在 P ...

  7. python中函数分为哪四类_Python函数参数分类原理详解

    1.函数的参数在哪里定义 在python中定义函数的时候,函数名后面的括号里就是用来定义参数的,如果有多个参数的话,那么参数之间直接用逗号,隔开 案列: # 利用函数的参数,定义一个可以完成任意两个数 ...

  8. 定义一个没有参数的函数、输出python3次_Python函数参数详解,三天让你掌握python,不再是小白

    原标题:Python函数参数详解,三天让你掌握python,不再是小白 引言 随着程序功能的增多,代码量随之增大,此时仍不加区分地把所有功能的实现代码放到一起,将会使得程序的组织结构不清晰,可读性变差 ...

  9. python采用函数式编程模式吗_Python函数与函数式编程

    1 函数 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性,和代码的重复利用率.你已经知道Python提供了许多内建函数,比如print().但你也可以自己创 ...

最新文章

  1. Python学习笔记.OS学习笔记 OS操作系统(operating system)(三) 日期和时间
  2. python语言及其应用-Python语言及其应用.PDF
  3. Flink异步io应用场景之流表join维表
  4. 怎么彻底删除oracle
  5. [小米OJ] 4. 最长连续数列
  6. 华为系统10.0是鸿蒙吗,暂时忘记鸿蒙!华为EMUI 10.0发布时间确认:这才是主角...
  7. 【转】设计模式学习笔记之命令模式
  8. mysql慢查询call_慢查询日志 - Azure Database for MySQL | Microsoft Docs
  9. 赚钱第一,投资第二,才是正确的财富获取方式
  10. 在哪里学python-python在哪学
  11. 【KDD20】图神经网络在生物医药领域的应用
  12. 设计模式之————依赖注入(Dependency Injection)与控制反转(Inversion of Controller)...
  13. 360n7手机断网没信号_你的手机信号为什么总比别人差?原因没那么简单
  14. 小程序容器化:基于uni-app的Android小程序开发
  15. c语言第六版题目,C primer plus 第六版 第6版 002章 第二章 复习题 答案 中文
  16. 【JS】网页自动连点器,选取网页元素连续点击
  17. java fx scen,java基础:10.2 Java FX之显示图片
  18. Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.17:test (default-test) on pr
  19. 质量保证QA与质量控制QC
  20. Android系统完整的启动流程

热门文章

  1. 【14:00开播】国际顶会强力加持,算法“视”界杯巅峰之战拉开帷幕!
  2. 对比学习在NLP和多模态领域的应用
  3. 达摩院李雅亮:大规模预训练模型的压缩和蒸馏
  4. NLP预训练家族 | Text-To-Text范式统一NLP任务
  5. 知识蒸馏在广告系统中的应用(一)
  6. 工程数学(数值分析)第二讲:非线性方程求根
  7. 使用字节流复制一个文件夹
  8. envi窗口滤波_高光谱ENVI图像处理之滤波
  9. java 由接口构造对象_Java学习笔记04——类和对象|抽象和接口|构造方法与继承...
  10. 若依单体版本代码生成模块使用教程