变量的引用_概念

理解了变量的引用之后, 对于我们理解在python 中的函数的参数传递和以及函数的返回值都是非常由帮助的.

当一个python 程序运行的时候, 变量和数据都是保存在内存中的.

变量的引用这个概念, 就是介绍一下当一个python 程序运行时, 变量和数据是怎样保存的, 并且保存的是什么内容.

当一个python 运行的时候, 变量和数据是分开保存的,.

数据就是保存的数据, 它在内存中有个独立的位置, 这个位置,我们通常把它叫做地址.

而变量中保存的就是数据在内存中的地址.

变量记录数据的地址这个动作, 我们就可以把它叫做引用.

在python 中, 我们可以使用id 这个函数来查看一个数据在内存中对应的地址

 a = 1 这句话是这么执行的, 在内存中用一个小格子, 这个小格子保存数字1, 同时这个小个子在内存中应该有一个固定的位置, 这个位置就在使用一个变量a, 让变量a 来记录一下数字1 的内存地址, 这样我们就可以通过变量a 访问到数字1了, 而这个红色的箭头就可以看作是一个引用.

使用id 这个函数确认一下数据在内存中的地址, 先把变量a 当作参数, 传递给id 这个函数, 回车后返回一个地址.

也就是说变量a 这个数据是保存在内存中 10914368 这个位置.

 在使用id(1) 来查看一下数字1 对应的内存地址.

数字1 的内存地址就是 10914368.

若b = a 的话, 表设计e变量b 应该保存数字1, 在使用 id 这个函数来查看一下变量b中保存数据所在的内存地址, b 中的地址仍然是10914368.

应该这样看待a, 1, b 这三个10914368, b = a, 就等同于让变量b 记录了变量 a 中的数值, 就是让变量b 同样保存了 1 的内存地址, 这就叫变量b 引用了数字1, 我们通过a 也好, b 也好, 都能访问到数字1.

 再写个a = 2, 但没回车, 变量a 已经在内存中存在(因为之前已经定义了a = 1), 再用id 函数查看一下变量a 中的内存地址, a 中的地址发生了变化, 变成了10914400.

 但变量b 中保存的数据地址仍然是10914368.

让a = 2, 就会重新在内存中开辟一个小格子, 这个小格子内放着数字2, 并且这个小格子的地址是10914400, 然后让a 断开对1 的引用, 也就是不再记录数据1 的内存地址10914368, 而是记录数据2 的内存地址10914400, 转为引用数据2.

但b 对1 的引用并没有断开, 所以b 仍然保存着数据 1 的'内存地址.

变量a, b 可以看作便签纸, 当a = 1执行的时候, 相当于搞了一个标签纸a 贴在1 的小格子上.

当b = a 这句代码执行的时候, 相当于又创建了一个标签纸 b, 把这个标签纸仍然贴在数据1的这个小格子上, 这样无论通过a 也好, b 也好, 都可以访问到数字1.

a = 2, 这句代码意味着,先把a 这张标签纸从数字1 的小格子上撕下来, 然后把这张标签纸贴到数字2 的小格子上, 

 

调用函数传递实参的作用

在函数调用时, 实参是通过引用来传递数据的, 

查看数据1 的内存地址.

 在函数内部, 使用id 这个函数来调用num 这个形参, 调用test(a),并运行一下程序.

 从上到下顺序执行, 执行a = 10 这句代码.

 调用test()函数时, 会把变量a 这个实参传递给test() 函数.

python 传递一个变量a 的时候, 并不会把数字10 传递到函数内部, 而是会把变量a 中保存的内存地址传递到函数内部.

调用函数时, 会跳转到函数的第一行代码来执行, 函数有一个形参num, 而调用函数时, 传递的是引

用,python 就会准备一个名字叫num 的变量, 并且让这个num 的变量来引用一下数字10 的地址, 因为我们调用函数是传递的是地址, 而不是数字10, 当num准备完成之后, 在函数执行时, 使用id 这个函数来查询变量num 保存数据的地址, 同样应该输出 10914656 这个内存地址.

 这就是在 python 中传递数据的一种方式.

 函数返回值传递引用

函数的返回值同样也是通过引用来传递的.

第一步先定义一个字符串变量, 第二步将字符串变量返回.

发现了 字符串的内存地址要比数字10 的内存地址大很多.

 

 注意: 如果函数有返回值, 但是没有定义变量接收, 程序不会报错,但无法获得返回结果, 应该定义一个变量来接收一下函数的返回结果, 再使用print 函数打印出来.

总结:将地址写在标签纸上一次,就算是一次变量的引用,也就算是一次地址的引用。标签纸的颜色多种多样,有a色,有b色,上面都写着一个相同的地址,8888,并且都贴在了该地址所对应的空间上(贴在外面),也就是贴在该地址所对应的内存空间的外面。总结:变量就是地址,变量名就是各种颜色的便签纸,变量的引用就是 将地址抄在便签纸上并贴在内存上的过程。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值