2 回答

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超4個(gè)贊
事實(shí)證明,這可能是我保存的JSON文件的問題,我從中加載了我的對象。正如J_H建議使用的,這些元素是相同的。這個(gè)提示在調(diào)試我的問題時(shí)非常有用。budget
id(x)
在沒有對代碼進(jìn)行任何更改的情況下,并且從頭開始而不是加載我的JSON文件,我沒有再次看到這種行為。我保存了它,停止了程序,再次運(yùn)行它并加載了我新保存的文件,現(xiàn)在,它正在按預(yù)期運(yùn)行。

TA貢獻(xiàn)1853條經(jīng)驗(yàn) 獲得超6個(gè)贊
我不知道你是如何創(chuàng)建數(shù)據(jù)結(jié)構(gòu)的,因?yàn)槟銢]有發(fā)布那個(gè)代碼。
但是你的癥狀清楚地表明你做了這樣的事情:
>>> a = ['apple']
>>> fruit = [a, a, a]
>>> a.append('banana')
>>> fruit
[['apple', 'banana'], ['apple', 'banana'], ['apple', 'banana']]
也就是說,您有一個(gè)內(nèi)部可變?nèi)萜鳎ɑ蝾愃茖ο螅⑶夷耐獠咳萜骶哂袑υ搯蝹€(gè)內(nèi)部容器的多個(gè)引用。假設(shè)您顯示外部容器?,F(xiàn)在,您更改了內(nèi)部容器(如上所示),這將影響多個(gè)位置的顯示輸出,因?yàn)槟卸鄠€(gè)對更改內(nèi)容的引用。a
如果您對細(xì)節(jié)感到好奇,可以使用例如 以查看元素是相同還是不同。python函數(shù)大致相當(dāng)于一個(gè)C程序,詢問在哪個(gè)地址進(jìn)行存儲以進(jìn)行分配。print(list(map(id, fruit)))id(x)x
添加回答
舉報(bào)