楼主:
surimodo (好吃棉花糖)
2022-06-29 00:21:21找半天也看不出哪里错
结果是传值为啥变成传址= =
原来python有这么骚的操作
A = json.load(f)
B = A
本来一个要当参考值读取就没要变
一个要把变动重新写入档案
结果 我动A
B也跟着一起动了
wtf
分开读取不用 B =A
问题都解决了
楼主:
surimodo (好吃棉花糖)
2022-06-29 00:29:00一个档案但要用两次所以先读一次放到A B再读取A结果更动A B也会更多
B = new, if B != A: B = A 呢A = B
楼主:
surimodo (好吃棉花糖)
2022-06-29 00:35:00没试 我直接也读取 B=json.load(f)
楼主:
surimodo (好吃棉花糖)
2022-06-29 00:39:00我是程式开头直接读取 不用比较阿一定两个都相同是一个读取后不更动 一个要更动只是更动的那个变量 很神奇也会影响另一个
作者:
int0x80 (请逐项修改)
2022-06-29 00:42:00python哪有什么址 那叫reference
json.loads回传的是一个dictionary所以A跟B都会参照同一个物dictionary 物件
作者:
int0x80 (请逐项修改)
2022-06-29 00:44:00dict是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
楼主:
surimodo (好吃棉花糖)
2022-06-29 00:51:00pass by reference中文就是传址= =
所以 变动重新写入档案 然后变动是跟原本的一样 ㄇ
作者:
Mesenne (心火)
2022-06-29 01:01:00dict要用dict.copy()复制ㄚ 如果是巢状要用copy包里面的一个func才能复制
可以把python的变量名称想像成贴纸A = json.load(f) 做了两件事:1. 建构一个dict 2.在这个dict上贴上A这个贴纸B = A 又做了两件事:1. 找到A贴纸黏的物件 2. 在这个物件上贴上另一个贴纸B你会发现这个物件上同时贴了A跟B两张贴纸,所以A跟B参照同一个物件