Re: [闲聊] python大师请进

楼主: surimodo (好吃棉花糖)   2022-06-29 00:21:21
找半天也看不出哪里错
结果是传值为啥变成传址= =
原来python有这么骚的操作
A = json.load(f)
B = A
本来一个要当参考值读取就没要变
一个要把变动重新写入档案
结果 我动A
B也跟着一起动了
wtf
分开读取不用 B =A
问题都解决了
作者: JerryChungYC (JerryChung)   2022-06-29 00:28:00
所以是有两个档案ㄛ
楼主: surimodo (好吃棉花糖)   2022-06-29 00:29:00
一个档案但要用两次所以先读一次放到A B再读取A结果更动A B也会更多
作者: JerryChungYC (JerryChung)   2022-06-29 00:33:00
B = new, if B != A: B = A 呢A = B
楼主: surimodo (好吃棉花糖)   2022-06-29 00:35:00
没试 我直接也读取 B=json.load(f)
作者: Suicidism () )   2022-06-29 00:38:00
做什摸会需要边读取边修改
作者: JerryChungYC (JerryChung)   2022-06-29 00:38:00
怎么不直接比对你对A动的值与原本的值是否不同
楼主: surimodo (好吃棉花糖)   2022-06-29 00:39:00
我是程式开头直接读取 不用比较阿一定两个都相同是一个读取后不更动 一个要更动只是更动的那个变量 很神奇也会影响另一个
作者: int0x80 (请逐项修改)   2022-06-29 00:42:00
python哪有什么址 那叫reference
作者: Suicidism () )   2022-06-29 00:43:00
json.loads回传的是一个dictionary所以A跟B都会参照同一个物dictionary 物件
作者: int0x80 (请逐项修改)   2022-06-29 00:44:00
dict是mutable A和B指向同一个dict 当然会一起被改道
楼主: surimodo (好吃棉花糖)   2022-06-29 00:44:00
我B=A 不是应该复制一份物件给B ?喔 那就是传址阿干
作者: int0x80 (请逐项修改)   2022-06-29 00:46:00
例如先A=1 再A=A+1 实际上是把A从指向1变成指向2没有地址阿 哪来的地址 python不须要地址来定义全部都是reference
作者: Suicidism () )   2022-06-29 00:49:00
楼主: surimodo (好吃棉花糖)   2022-06-29 00:51:00
pass by reference中文就是传址= =
作者: JerryChungYC (JerryChung)   2022-06-29 00:51:00
所以 变动重新写入档案 然后变动是跟原本的一样 ㄇ
作者: Mesenne (心火)   2022-06-29 01:01:00
dict要用dict.copy()复制ㄚ 如果是巢状要用copy包里面的一个func才能复制
作者: yoshin1007 (yoshin1007)   2022-06-29 01:08:00
可以把python的变量名称想像成贴纸A = json.load(f) 做了两件事:1. 建构一个dict 2.在这个dict上贴上A这个贴纸B = A 又做了两件事:1. 找到A贴纸黏的物件 2. 在这个物件上贴上另一个贴纸B你会发现这个物件上同时贴了A跟B两张贴纸,所以A跟B参照同一个物件

Links booklink

Contact Us: admin [ a t ] ucptt.com