大家都知道在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 1

1 2 1

3 2 3

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

本文标题: Python参数传递对象的引用原理解析

本文地址: http://www.cppcns.com/jiaoben/python/313959.html

python对象传递_Python参数传递对象的引用原理解析相关推荐

  1. python 参数收集_Python参数传递及收集机制原理解析

    python参数传递时,主要有位置参数和关键字参数. 1. 位置参数:顾名思义,参数的位置顺序很重要,因为是直接根据位置赋值的. def func1(a, b): print(a,b) # 位置参数, ...

  2. python endswith函数_Python startswith()和endswith() 方法原理解析

    startswith()方法 Python startswith() 方法用于检查字符串是否是以指定子字符串开头 如果是则返回 True,否则返回 False.如果参数 beg 和 end 指定值,则 ...

  3. python列表是可变对象吗_Python可变对象和不可变对象

    Python中一切皆对象,每个对象都有其唯一的id,对应的类型和值,其中id指的是对象在内存中的位置.根据对象的值是否可修改分为可变对象和不可变对象.其中, 不可对象包括:数字,字符串,tuple 可 ...

  4. python时间变量_python的对象 变量

    对象 所有的数据类型都是对象 字符串 数字:整数.数字 列表.字典 函数.类.模块.方法 print(type(20)) # 查看对象的数据类型 python整型: int  浮点型 :float 精 ...

  5. python 之属性_Python之对象的属性

    # -*- coding: utf-8 -*- #python 27 #xiaodeng #Python之对象的属性 #http://python.jobbole.com/82622/ #对象的属性 ...

  6. python解析原理_Python语法垃圾回收机制原理解析

    一 引入 解释器在执行到定义变量的语法时,会申请内存空间来存放变量的值,而内存的容量是有限的,这就涉及到变量值所占用内存空间的回收问题,当一个变量值没有用了(简称垃圾)就应该将其占用的内存给回收掉,那 ...

  7. python timer详解_python线程定时器Timer实现原理解析

    这篇文章主要介绍了python线程定时器Timer实现原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一.线程定时器Timer原理 原理比较 ...

  8. python 定时器实现原理_python线程定时器Timer实现原理解析

    这篇文章主要介绍了python线程定时器Timer实现原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一.线程定时器Timer原理 原理比较 ...

  9. python如何进行格式化输出变量_Python变量格式化输出实现原理解析

    print() 函数使用以 % 开头的转换说明符对各种类型的数据进行格式化输出. 转换说明符(Conversion Specifier)只是一个占位符(也称为格式化操作符),它会被后面表达式(变量.常 ...

最新文章

  1. 基于PaddlePaddle的机器翻译教程 | 深度学习基础任务系列
  2. Android-NDK-hello-jniCallback
  3. let const —— ES6基础总结(二)
  4. SAP UI5 bindProperty
  5. 分享自TERRY-V 《Qt Creator生成带图标的exe文件》
  6. 每天30分钟搞Software Rendering--(0)搜集资料,阅读,了解
  7. C程序设计 4顺序程序设计
  8. RS信道编码(matlab)
  9. 最新数据:中国一二三四五线城市排名出炉!
  10. 【iTools】iTools Index
  11. 3、核对单《数据收集工具与技术》
  12. root用户无法启动vscode的解决方法
  13. RoundProgressBar(圆形进度条)
  14. 基于php+mysql的校园木本植物检索查询统
  15. 拷贝原站点有用文章(合并页)
  16. ebuy遇到的问题以及解决方法
  17. 【研发管理】三手项目 接盘时 必须要做的四件事
  18. 优化游戏以便在 Facebook.com 上运行
  19. frog——2017科技趋势预测
  20. CKA认证含金量高吗?

热门文章

  1. UI设计干货素材|动效导航,漂亮的悬停动效
  2. 护理在计算机的应用研究,计算机虚拟和模拟技术在护理实践教学中应用的研究...
  3. a人工智能b大数据c云计算_你清楚5G物联网、大数据、云计算、人工智能之间的关联吗?...
  4. c语言传入的指针无返回值,c语言 关于指针注意事项
  5. weight_decay一般设置为多少_50岁的夫妻一般有多少存款?他们在为养老做准备吗?...
  6. qwt+qt5.4.1+win7 环境搭建(完美版)
  7. 计算机网络:VLAN和VXLAN
  8. 如何给UNIX域Socket套接字抓包?
  9. 用管道pipe实现程序与shell/bash脚本之间的通路
  10. Docker基础知识:Containers,Namespace,CGroups