今天给一个朋友讲 Python,他提问在Python 中函数是传值还是传引用。
值变量
这个问题其实是一个伪问题,在 Python、Java、C#中根本不存在传值还是传引用的说法。理解这个问题先要从变量说起(以 Python 为例)
a = 10
b = 20复制
此时变量 a 就表示数字 10,b 表示数字 20,内存布局如下:
如果做赋值
c = a复制
此时 a、c 是两块不同的内存空间,因为a 表示的是数字 10,当为 c 赋值的时候就把数字 10 赋值给了 c。此时 a、c 都表示数字 10。
地址变量
继续看例子
l = [1, "abc", 10]复制
变量 l 里面有多个元素,所以 l 不再是具体的某一个值。它表示一个地址。
再次强调:变量 l 表示一个地址变量 l 表示一个地址变量 l 表示一个地址所以当赋值的时候,我们是把地址赋给一个新的变量
t = l复制
总结
变量有两种含义,一个表示值(变量本身的值)一个表示地址(复合数据的开始地址),所以当我们赋值的时候是把值赋给新的变量或者把地址赋给新的变量。这个语义始终都是一致的,包括在函数传递的时候。所以其实并不存在传值或者传引用的概念,是变量的语义本身是值还是地址。
判断一个变量是值还是引用的方法很简单,就看这个数据是简单类型还是复合类型(从数据结构的角度来说)。
欢迎加入我的知识星球(免费)
欢迎关注公众账号了解更多信息“写程序的康德——思考、批判、理性”
文章转载自写程序的康德,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
2025年4月中国数据库流行度排行榜:OB高分复登顶,崖山稳驭撼十强
墨天轮编辑部
1693次阅读
2025-04-09 15:33:27
2025年3月国产数据库大事记
墨天轮编辑部
825次阅读
2025-04-03 15:21:16
2025年3月国产数据库中标情况一览:TDSQL大单622万、GaussDB大单581万……
通讯员
579次阅读
2025-04-10 15:35:48
征文大赛 |「码」上数据库—— KWDB 2025 创作者计划启动
KaiwuDB
489次阅读
2025-04-01 20:42:12
数据库,没有关税却有壁垒
多明戈教你玩狼人杀
469次阅读
2025-04-11 09:38:42
国产数据库需要扩大场景覆盖面才能在竞争中更有优势
白鳝的洞穴
446次阅读
2025-04-14 09:40:20
最近我为什么不写评论国产数据库的文章了
白鳝的洞穴
378次阅读
2025-04-07 09:44:54
天津市政府数据库框采结果公布!
通讯员
348次阅读
2025-04-10 12:32:35
【活动】分享你的压箱底干货文档,三篇解锁进阶奖励!
墨天轮编辑部
332次阅读
2025-04-17 17:02:24
优炫数据库成功入围新疆维吾尔自治区行政事业单位数据库2025年框架协议采购!
优炫软件
327次阅读
2025-04-18 10:01:22