找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 2450|回复: 2

[求助] 关于python函数参数的传递问题

1

主题

2

帖子

2

积分

贫民

积分
2
von 发表于 2020-10-19 15:34:12 | 显示全部楼层 |阅读模式
各位前辈你们好,小弟最近对于python赋值、地址以及函数参数传递有一些疑惑,自己也百度了一些东西,但是还是不太明白,就注册了一个账号想来请教大家。

具体问题就是 python在函数中参数是值传递还是引用传递,这个我百度了一些说法,有的说本质还是值传递,有的说引用传递,还有的说如果可变就是值传递,不可变就是引用传递。

这个我自己也实验了一下,简单的定义了一个函数,传入了我自己创建的一个int型变量a=1,实际上在我的理解上,我认为我是可以修改a的值的,也就是我可以重新给a赋值(例如a=2)。我在函数中对a重新赋值,但是函数外中的a并没有修改,根据我找的资料,那么a应该是不可变的?

此外,我也理解一点指针和地址的相关知识,我尝试打印函数外的a和函数内的a的地址(使用的id函数),发现这两个地址都是一样的,那么我认为两个a指向的都是同一个地址空间,为什么我对a进行操作,外面的a无法改变呢?并且我查到python的赋值“=”其实就是将赋值的变量地址指过去。

我知道例如list或者字典传入的话是可以修改的。但是为什么例如a=1或者a='1'不可以?这个算是元组吗?那么为什么我可以重新给它赋值?还是说id拿到的并不是类似C语言的地址?中间有什么技术细节吗?如果有链接就更好了,非常感谢
  1. def fun1(a):
复制代码


回复

使用道具 举报

1

主题

2

帖子

2

积分

贫民

积分
2
von  楼主| 发表于 2020-10-19 15:37:18 | 显示全部楼层
上面打错了不好意思,是不可变就是值传递,可变就是引用传递
回复 支持 反对

使用道具 举报

0

主题

956

帖子

956

积分

圣骑士

积分
956
sheeboard 发表于 2020-10-22 10:03:08 | 显示全部楼层
本帖最后由 sheeboard 于 2020-10-22 20:20 编辑

这是python节约内存空间的一个策略,较小integer变量是放在一个内存段内的数组里,数组退化,所以显示的是一个id(起始内存地址),引用传参数其实是传 常量指针,因为复杂,python不用考虑这些。
回复 支持 反对

使用道具 举报

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

本版积分规则

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