作者:
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參照同一個物件