python参数传递:对象的引用
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 = 1class Child1(Parent): passclass Child2(Parent): passprint Parent.x, Child1.x, Child2.x Child1.x = 2print Parent.x, Child1.x, Child2.x Parent.x = 3print Parent.x, Child1.x, Child2.x输出结果为:1 1 11 2 13 2 3
在继承中,所有子类中的x原本都是引用的父类中x对象的存储空间,但是child1中的x单独指向了另一块存储空间。这样以来,的到这个结果也就不意外了
python参数传递:对象的引用相关推荐
- python对象传递_Python参数传递对象的引用原理解析
大家都知道在python中,一切皆对象,变量也不再具有类型,变量仅仅是对象的一个引用,我们通常用变量来测类型,通常测得就是被这个变量引用得对象的类型. python采用的是传递对象的引用,为了方便说明 ...
- Python中对象的引用与复制
在python进行像b = a这样的赋值时,只会创建一个对a的新引用,使a的引用计数加1,而不会创建新的对象: >>> a = 'xyz' >>> import s ...
- 弱引用的用途:在底层C++对象被上层python脚本对象使用时(转)
在使用python脚本和底层C++对象进行交互的过程中发生了一个问题:由于底层C++对象的创建和删除决定权由底层决定,当底层决定删除这些对象而上层仍然在"强引用"这些对象的时候,就 ...
- 经典 Python参数传递采用的肯定是“传对象引用”的方式。相当于传值和传引用的一种综合。如果函数收到的是一个可变对象(比如字典或者列表)的引用,就能修改对象的原始值--相当于通过“传引用”来传递对象
python不允许程序员选择采用传值还是传引用.Python参数传递采用的肯定是"传对象引用"的方式.这种方式相当于传值和传引用的一种综合.如果函数收到的是一个可变对象(比如字典或 ...
- python参数传递方法_深入理解python中函数传递参数是值传递还是引用传递
python 的 深入理解python中函数传递参数是值传递还是引用传递 目前网络上大部分博客的结论都是这样的: Python不允许程序员选择采用传值还是传 引用.Python参数传递采用的肯定是&q ...
- python学习笔记4(对象/引用;多范式; 上下文管理器)
python学习笔记4(对象/引用:多范式; 上下文管理器) ### Python的强大很大一部分原因在于,它提供有很多已经写好的,可以现成用的对象 21. 动态类型:对象/引用 对象和引用: 对象是 ...
- c++ 将引用赋值给引用_5分钟掌握 Python 对象的引用
1. 引言 引用在各种编程语言中都有涉及,如java中值传递和引用传递.python的对象引用也是学习python过程中需要特别关注的一个知识点,特别是对函数参数传递,可能会引起不必要的BUG.本文将 ...
- Python参数传递:值传递和引用传递
前提: 1.Python 中万物皆为对象,变量以引用的方式指向对象. 2.身份 2.1 可变对象:对象的内存值可以被改变,引用变量改变后,实际上是其所指向的值发生了变化,当前这块内存区域中存放的内容发 ...
- python介绍和用途-Python对象与引用的介绍
对象 Python 中,一切皆对象.每个对象由:标识(identity).类型(type).value(值)组成. 1. 标识用于唯一标识对象,通常对应于对象在计算机内存地址.使用内置函数 id(ob ...
最新文章
- Codeforces Round #552 (Div. 3)D、E题解
- JAVA泛型知识(一)
- Ansible 详解2-Playbook使用
- 阿里巴巴下一代云分析型数据库AnalyticDB入选Forrester Wave™ 云数仓评估报告 解读
- “浴霸”三摄出镜率真高!中兴Blade 20工信部入网
- java删除指定文件_java删除指定目录下指定格式文件的方法
- 2d游戏引擎_8年,从2D到3D,我的学习之路
- html财务统计,财务统计.html · 举子/layuiadmin-templete - Gitee.com
- opencv cv.findContours 函数详解
- Excel自动转曲线图的时PHP,excel表格数据转为曲线-如何将EXCEL表中的数据生成曲线...
- 实用的Portraiture滤镜磨皮教程
- php代码执行函数解析
- 天线的回波损耗和驻波比
- rust倒地了怎么起来_ggxx出招表
- 从外包公司到今日头条offer,吐血整理
- R for LC+cohort
- 人脸识别opencv+python
- 使用ffmpeg将mp4格式视频元数据信息转到视频第一帧、转换mp4为ts格式视频
- 大学两年的经历感受——大学应做的五件事
- MapBox地图怎么去掉地名显示
热门文章
- 【FFprobe】直接读取TS文件 的stream信息
- 阿里云安装jenkins_使用Jenkins安装OpenStack云
- 嵌入式操作系统网络编程复习题
- linux gnuplot yum源,在CentOS上编译安装gnuplot绘图工具
- DRF--generics.py中的ListCreateAPIView,RetrieveUpdateDestroyAPIView
- IO - 同步,异步,阻塞,非阻塞 (亡羊补牢篇)
- t460s linux 数据库,lenovo thinkpad t460s升级bios版本,造成opensuse linux 引导丢失修复...
- HarmonyOS Hi3518系列 环境篇①——HiSpark_IPC_DIY摄像头开箱组装
- 指纹识别智能门锁方案设计开发
- M3U8 文件格式简介