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