Re: [閒聊] python大師請進

作者: lturtsamuel (港都都教授)   2022-06-29 01:35:20
※ 引述《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
就這樣==
作者: Rushia (みけねこ的鼻屎)   2022-06-29 01:36:00
像我一樣的垃圾就乖乖選有垃圾回收機制ㄉ語言
作者: surimodo (好吃棉花糖)   2022-06-29 01:50:00
什麼move copy constructor = =
作者: Apache (阿帕契)   2022-06-29 01:51:00
std::move
作者: DDFox (冒險者兼清潔工)   2022-06-29 02:06:00
有垃圾回收機制 沒錯java

Links booklink

Contact Us: admin [ a t ] ucptt.com