鱼C论坛

 找回密码
 立即注册
查看: 2850|回复: 6

[已解决]关于函数的参数传递机制的问题?

[复制链接]
回帖奖励 9 鱼币 回复本帖可获得 1 鱼币奖励! 每人限 1 次(中奖概率 50%)
发表于 2021-3-14 21:26:50 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 我爱吃爆米花 于 2021-3-14 21:41 编辑

Python的值传递,就是将实际参数值的副本(复制品)传入函数,而参数本身受到任何影响。
问题:
1、变量是字符串,在内存中保存的是什么?
2、如果变量是一个可变对象,如字典,内存中怎么储存。《疯狂python讲义》说内存中有两个东西:
对象本身和指向该对象的引用变量(一个指针)。
怕我表述有歧义,让人看不懂,以图片附上书中关于这部分的内容。
欢迎各位的解答!
最佳答案
2021-3-14 22:10:44
本帖最后由 jackz007 于 2021-3-14 22:20 编辑

        如果在函数中有对参数的赋值行为,那么,这个被赋值的变量就已经不再是调用函数时的那个对象,而是一个全新的对象了,道理很简单,因为,对于 Python 而言,赋值就意味着定义变量。所以,函数调用前后,在函数内对参数所作的所有修改都不会被带出函数。也就是说,不可以在函数中通过赋值来修改函数的参数。
        如果传入函数的参数属于可变对象,那么,只要在函数中没有被赋值,那么,这个参数始终与调用参数是同一个对象,通过对象方法对对象的所有修改都会被保留,函数调用结束后,所有的修改都会被带出函数,就是说,可以在函数中通过对象的方法修改调用参数。
屏幕截图 2021-03-14 210227.png
屏幕截图 2021-03-14 210416.png
屏幕截图 2021-03-14 210439.png
屏幕截图 2021-03-14 210507.png
屏幕截图 2021-03-14 210525.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-3-14 21:31:04 | 显示全部楼层
如果变量是一个可变对象,如字典,内存中怎么储存。《疯狂python讲义》说内存中有两个东西:
对象本身和指向该对象的引用变量(一个指针)。这个指针是地址的意思吗?如果是地址的意思的话,变量是字符串,我认为字符串在内存中,也是储存一个地址和对象本身。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-3-14 21:40:31 | 显示全部楼层
为什么字符串传的是值,可变类型传参传的地址。这应该涉及到不同类型在内存中储存的方式,想搞懂,求大神解读。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-14 22:10:44 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2021-3-14 22:20 编辑

        如果在函数中有对参数的赋值行为,那么,这个被赋值的变量就已经不再是调用函数时的那个对象,而是一个全新的对象了,道理很简单,因为,对于 Python 而言,赋值就意味着定义变量。所以,函数调用前后,在函数内对参数所作的所有修改都不会被带出函数。也就是说,不可以在函数中通过赋值来修改函数的参数。
        如果传入函数的参数属于可变对象,那么,只要在函数中没有被赋值,那么,这个参数始终与调用参数是同一个对象,通过对象方法对对象的所有修改都会被保留,函数调用结束后,所有的修改都会被带出函数,就是说,可以在函数中通过对象的方法修改调用参数。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-28 20:21:24 | 显示全部楼层
感谢分享1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-7-3 16:12:52 | 显示全部楼层

回帖奖励 +1 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-7-26 03:07:09 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-14 01:17

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表