python参数传递:对象的引用

大家都知道在python中,一切皆对象,变量也不再具有类型,变量仅仅是对象的一个引用,我们通常用变量来测类型,通常测得就是被这个变量引用得对象的类型。
例如:

这里的类型就是123这个对象的类型。变量的作用就相当于c中的指针,指向特定的内存空间,有了这个基础,我们就可以来聊一聊python中的参数传递了。
接触过c或c++的朋友都知道,一般我们常说的传参方式有两种:传引用、传值
但是python和他们都不一样。python采用的是传递对象的引用,为了方便说明,我们来看一个例子:

test = [1]
def change1(a):a = [2]def change2(a):a.append(3)change1(test)
change2(test)
print test

我们来看一下最后的输出:
[1,3]
是不是有人误以为是[2,3]?那你可得好好看接下来的内容。
传参传的是对象的引用!!!!!!
所以在change1(a)函数中,我们知道形参a与test引用了同一块内存空间,然后a在函数内部被修改了,它执行了另一块内存空间,也就是存放[2]的地方,但是只是a的指向改变了,test的指向还是存放[1]的内存空间。所以,接下来change2()对这块内存空间上放的值进行了修改,就得到了我们最后看到的结果。
为了加深理解,我觉得有必要再举一个类继承的例子:

class Parent(object): x = 1​class Child1(Parent): pass​class Child2(Parent): pass​print Parent.x, Child1.x, Child2.x Child1.x = 2​print Parent.x, Child1.x, Child2.x Parent.x = 3​print Parent.x, Child1.x, Child2.x​输出结果为:1 1 11 2 13 2 3

在继承中,所有子类中的x原本都是引用的父类中x对象的存储空间,但是child1中的x单独指向了另一块存储空间。这样以来,的到这个结果也就不意外了

python参数传递:对象的引用相关推荐

  1. python对象传递_Python参数传递对象的引用原理解析

    大家都知道在python中,一切皆对象,变量也不再具有类型,变量仅仅是对象的一个引用,我们通常用变量来测类型,通常测得就是被这个变量引用得对象的类型. python采用的是传递对象的引用,为了方便说明 ...

  2. Python中对象的引用与复制

    在python进行像b = a这样的赋值时,只会创建一个对a的新引用,使a的引用计数加1,而不会创建新的对象: >>> a = 'xyz' >>> import s ...

  3. 弱引用的用途:在底层C++对象被上层python脚本对象使用时(转)

    在使用python脚本和底层C++对象进行交互的过程中发生了一个问题:由于底层C++对象的创建和删除决定权由底层决定,当底层决定删除这些对象而上层仍然在"强引用"这些对象的时候,就 ...

  4. 经典 Python参数传递采用的肯定是“传对象引用”的方式。相当于传值和传引用的一种综合。如果函数收到的是一个可变对象(比如字典或者列表)的引用,就能修改对象的原始值--相当于通过“传引用”来传递对象

    python不允许程序员选择采用传值还是传引用.Python参数传递采用的肯定是"传对象引用"的方式.这种方式相当于传值和传引用的一种综合.如果函数收到的是一个可变对象(比如字典或 ...

  5. python参数传递方法_深入理解python中函数传递参数是值传递还是引用传递

    python 的 深入理解python中函数传递参数是值传递还是引用传递 目前网络上大部分博客的结论都是这样的: Python不允许程序员选择采用传值还是传 引用.Python参数传递采用的肯定是&q ...

  6. python学习笔记4(对象/引用;多范式; 上下文管理器)

    python学习笔记4(对象/引用:多范式; 上下文管理器) ### Python的强大很大一部分原因在于,它提供有很多已经写好的,可以现成用的对象 21. 动态类型:对象/引用 对象和引用: 对象是 ...

  7. c++ 将引用赋值给引用_5分钟掌握 Python 对象的引用

    1. 引言 引用在各种编程语言中都有涉及,如java中值传递和引用传递.python的对象引用也是学习python过程中需要特别关注的一个知识点,特别是对函数参数传递,可能会引起不必要的BUG.本文将 ...

  8. Python参数传递:值传递和引用传递

    前提: 1.Python 中万物皆为对象,变量以引用的方式指向对象. 2.身份 2.1 可变对象:对象的内存值可以被改变,引用变量改变后,实际上是其所指向的值发生了变化,当前这块内存区域中存放的内容发 ...

  9. python介绍和用途-Python对象与引用的介绍

    对象 Python 中,一切皆对象.每个对象由:标识(identity).类型(type).value(值)组成. 1. 标识用于唯一标识对象,通常对应于对象在计算机内存地址.使用内置函数 id(ob ...

最新文章

  1. Codeforces Round #552 (Div. 3)D、E题解
  2. JAVA泛型知识(一)
  3. Ansible 详解2-Playbook使用
  4. 阿里巴巴下一代云分析型数据库AnalyticDB入选Forrester Wave™ 云数仓评估报告 解读
  5. “浴霸”三摄出镜率真高!中兴Blade 20工信部入网
  6. java删除指定文件_java删除指定目录下指定格式文件的方法
  7. 2d游戏引擎_8年,从2D到3D,我的学习之路
  8. html财务统计,财务统计.html · 举子/layuiadmin-templete - Gitee.com
  9. opencv cv.findContours 函数详解
  10. Excel自动转曲线图的时PHP,excel表格数据转为曲线-如何将EXCEL表中的数据生成曲线...
  11. 实用的Portraiture滤镜磨皮教程
  12. php代码执行函数解析
  13. 天线的回波损耗和驻波比
  14. rust倒地了怎么起来_ggxx出招表
  15. 从外包公司到今日头条offer,吐血整理
  16. R for LC+cohort
  17. 人脸识别opencv+python
  18. 使用ffmpeg将mp4格式视频元数据信息转到视频第一帧、转换mp4为ts格式视频
  19. 大学两年的经历感受——大学应做的五件事
  20. MapBox地图怎么去掉地名显示

热门文章

  1. 【FFprobe】直接读取TS文件 的stream信息
  2. 阿里云安装jenkins_使用Jenkins安装OpenStack云
  3. 嵌入式操作系统网络编程复习题
  4. linux gnuplot yum源,在CentOS上编译安装gnuplot绘图工具
  5. DRF--generics.py中的ListCreateAPIView,RetrieveUpdateDestroyAPIView
  6. IO - 同步,异步,阻塞,非阻塞 (亡羊补牢篇)
  7. t460s linux 数据库,lenovo thinkpad t460s升级bios版本,造成opensuse linux 引导丢失修复...
  8. HarmonyOS Hi3518系列 环境篇①——HiSpark_IPC_DIY摄像头开箱组装
  9. 指纹识别智能门锁方案设计开发
  10. M3U8 文件格式简介