※ 引述《lturtsamuel (謹言慎行 拼relocate)》之銘言:
: ※ 引述《surimodo (搖滾少女!! 活力棉花糖!!)》之銘言:
: : 找半天也看不出哪裡錯
: : 結果是傳值為啥變成傳址= =
: : 原來python有這麼騷的操作
: : A = json.load(f)
: : B = A
: : 本來一個要當參考值讀取就沒要變
: : 一個要把變動重新寫入檔案
: : 結果 我動A
: : B也跟著一起動了
: : wtf
: : 分開讀取不用 B =A
: : 問題都解決了
surimodo: 為啥B不是複製一份A 而是跟A共用資料:(
簡單講就是
語言核心開發者 a.k.a 終生仁慈獨裁者
欽定
這個語言要有某種淺複製的能力
畢竟深複製大家可以自己實作 淺複製語言層面不支援就沒救了
而你區區語言使用者要如何召喚出這個淺複製能力呢
我們可以簡單想幾個方案
1. 用&取址 用*取值
2. 像現在這樣規定所有非primitive都是傳址
3. 像c++一樣,讓各個物件決定自己的 copy condtrctor
4. 像c++一樣用reference
5. 像 rust 一樣規定大家都不准隱式複製,所有賦值都是移動語意,會消費掉原來的變數
選1的話,顯然會給語言帶來更多複雜性
輕者像 golang 一樣,需要區分值跟指針,顯然不是一般python仔的小腦袋瓜能處理的
重者像c語言,連pointer arithmetic 還有手動記憶體釋放都要考慮
那我怎麼不去寫c就好==
3 別提了,我在面試新人都不太敢考什麼move copy constructor 的問題了
怎麼問怎麼倒
4 更別提了 python仔有可能搞懂reference coherence 這種問題嗎
5 那我怎麼不去寫rust
所以考量功能性跟易用性
答案就是2
就這樣==