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/m.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燈, 水草

請輸入看板名稱,例如:Soft_Job站內搜尋

TOP