变量的引用

  在python中,所有的变量都是指向地址,变量本身不保存数据,而是保存数据在内存中的地址。我们用下面的程序来理解:

 a = 10
print(id(a))
a = 11
print(id(a))

(利用id( )方法查看数据的地址)

输出结果为:

可以发现:修改变量的值,变量保存的地址随之改变。

python中:

  1. 变量和数据是分开存储的
  2. 变量 中保存着数据在内存中的地址

我们把变量中记录数据的地址的行为,叫做 引用。

通俗的来说,在 Python 中,变量的名字类似于 便签纸 贴在 数据 上。

再看一段代码:

 a = 10
print(id(a))
b = a
print(id(b))
c = 10
print(id(c))
d = 11
print(id(d))

结果如下:

从上面运行结果中,我们可以知道:

1.b=a是地址传递

2.声明一个变量时,如果内存中已经有变量要保存的内容了,会将该变量指向内存中原有内容的地址,如果内存中没有变量要保存的内容,就会在内存中开辟一块新的空间用来保存变量要保存的内容。


函数的参数和返回值的传递

我们通过一个程序来弄清楚函数的参数和返回值的传递方式是地址传递还是值传递。

def test(num):
print("-" * 40)
print("%d 在函数内的内存地址是 %x" % (num, id(num))) # 说明函数的参数传递时地址传递 result = 100 print("返回值 %d 在内存中的地址是 %x" % (result, id(result)))
print("-" * 40) return result a = 10
print("调用函数前,变量a引用的地址是 %x" % id(a)) r = test(a) print("调用函数时,实参内存地址是 %x" % id(a))
print("调用函数后,返回值内存地址是 %x" % id(r)) # 说明return返回值是地址传递

运行结果如下:

通过上面程序:

  1. 我们发现变量a以及将a传给函数的参数num的地址都是一致的,说明函数的参数传递是地址传递。
  2. 函数中result变量和接受返回值的r变量的地址是相同的,说明函数中的返回值传递也是地址传递

最新文章

  1. C#中Abstract和Virtual的区别
  2. 跌倒了,再爬起来:ASP.NET 5 Identity
  3. 将博客从jekyll迁移到了hexo
  4. Windows XP SP3下编译安装openssl-1.1.0b
  5. ABAP中Conversion Routine示例
  6. android——单点触控移动,多点触控放大缩小
  7. Java SE 第十讲---面向对象特征之封装2
  8. mouseover,mouseout,mouseenter,mouseleave的区别
  9. 如何导入hadoop源码到eclipse
  10. 【Unity3D】刚体与碰撞体以及is Trigger属性的意义
  11. [HZWER]藏妹子之处
  12. (转载)不能启动虚拟机 Unable to open kernel device "\\.\Global\vmx86
  13. Java_Activiti5_菜鸟也来学Activiti5工作流_之JUnit单元测试(四)
  14. HTML学习(四)样式
  15. sips 命令(iMac 下系统自带)
  16. iptables 初见 第一章
  17. Jquery部分小结
  18. ODAC(V9.5.15) 学习笔记(一)总论
  19. metasploit framework(六):信息收集
  20. Mysql 5.7 弱密码限制,及创建用户无密码用户

热门文章

  1. Android 学习 - Telnet 控制AVD
  2. JDK和CGLIB生成动态代理类的区别(转)
  3. 【bzoj2208】[Jsoi2010]连通数
  4. (三)maven出错记录
  5. maven学习总结-eclipse开发
  6. 475. Heaters 加热范围
  7. 686. Repeated String Match 字符串重复后的子字符串查找
  8. 基于Nginx实现集群原理
  9. opennebula 对接创建模板参数
  10. Office Web APP预览如何去掉顶部版权标志“Microsoft Office Web Apps”