Python 板


LINE

: 啊你的认知就是错的啊, 我就说 Google 就有一堆资料了你都没有在听嘛 : https://www.google.com.tw/?q=python+call+by+reference : 就看前五个结果好不好 : 1. https://stackoverflow.com/questions/986006 : 这个上面也有提到, 直接看 accepted answer (同时也是分数最高) : Arguments are passed by assignment. [...] the parameter passed in is : actually a reference to an object (but the reference is passed by value). 谢谢你人真好~ <3 我要的就是第一个 link 连到官方的说明。 Remember that arguments are passed by assignment in Python. 官方的文件直接解释了原原文的三个问题。 --- 一般的认知是: - 对 mutable object 来说它是 pass by object reference (link 4 & 5) - 对 immutable object 来说它是 pass by value Q: so is it passed by reference/value ? 严格来说都不是。官方的说法是 passed by assignment. 就我所知 by ref/value 的来源是 .NET 家族的 ref 关键字(C#, ByRef for VB),用 C# pass by reference 去找就会看到官方的 Programming Guide. (https://goo.gl/QNh2W4 ) 这里有一个延伸用物件实作的例子: https://repl.it/J8Us/0 - Python 并没有 by reference 这件事, by assignment 所在乎的是 mutability. (这也是为什麽官方文件会另外实作 class callByRef) - 相对而言,有 by reference 表示没有 immutable object 这种东西。 (things can be changed by reference.) * builtin types 实质上也是 mutable 的(in C),这也是为什麽 string 比较相等 性的时候得用 == 而不是 is 。 ( bool 是 builtin constants) --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 192.19.253.250
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Python/M.1500448247.A.315.html
1F:推 ckc1ark: 用==和is来比较跟mutable有什麽关系吗 07/19 16:25
is 是比较物件相等性(id()), == 是比较内容相等性(__eq__); immutable 物件 在操作的时候会隐性的被 reassign 成另外一个物件,所以得用 == 来比较 built-in 的 immutable 物件。 None, True 跟 False 也是 immutable 物件,但它被实作成 const ,所以用 is 或是 == 来比较都可以。 (一般建议是用 is) 我记得没错的话 effective java 第三章是在讲这个,有兴趣可以看一下。
2F:推 LessonWang: 因为用is的话 是看他们参考到的记忆体位址是否一样 而 07/19 16:52
3F:→ LessonWang: 用==只是看实质内容是否一样 07/19 16:52
4F:→ LessonWang: a='abc' b=a c='abc' 07/19 16:54
5F:→ LessonWang: a is b ->True 07/19 16:54
6F:→ LessonWang: a == b ->True 07/19 16:54
7F:→ LessonWang: a is c ->False 07/19 16:54
8F:→ LessonWang: a == c ->True 07/19 16:54
9F:→ LessonWang: id(a) == id(b) ->True 07/19 16:55
10F:→ LessonWang: 我都用id来看位址是否一样 07/19 16:55
11F:→ LessonWang: 不过 我还是得感谢u大和z大的整理和讨论 07/19 16:56
※ 编辑: zerof (203.77.72.241), 07/21/2017 21:26:21
12F:推 ckc1ark: 可以说一个和string不一样 实质上不是mutable的case吗? 07/22 11:52
13F:→ ckc1ark: 好像只有你说的boolean算是? 07/22 11:54
14F:→ zerof: int 也是 immutable 喔 07/23 11:13
15F:推 ckc1ark: int也是用==在比较耶 用is只有-1~256可以而已 07/23 11:35
看错你的问题... immutable 且 " 行为和 string 不一样 " 的例子,除了 bool 以外, builtin constants 都是。但我不觉得行为和 string 不一样就是了... 可以 用 is 来比较的原因是它是 constants ,所以用 == 比较的结果和 is 比较的结果是 一样的。 ※ 编辑: zerof (203.77.72.241), 07/23/2017 21:13:15
16F:推 ckc1ark: 不好意思有点久没看到 我的疑问就是 int和string一样都是 07/28 01:56
17F:→ ckc1ark: 要用==不能用is 所以int的case和string不同吗? 实质上是? 07/28 01:57
18F:→ ckc1ark: 我的想法是"实质上是mutable"并不是用==和is比较的原因 07/28 01:59
19F:→ ckc1ark: 是原本就是两个放在不同记忆体的物件 也就是id不同 07/28 01:59
20F:→ zerof: 呃...你就视为一样就好了 07/28 23:17







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:BabyMother站内搜寻

TOP