這是我的代碼:python:爲什麼listA.append('a')影響listB?
In [8]: b=dict.fromkeys([1,2,3,4], [])
In [9]: b[1].append(1)
In [10]: b[2].append(2)
In [11]: b[1]
Out[11]: [1, 2]
In [12]: b[2]
Out[12]: [1, 2]
In [13]: b
Out[13]: {1: [1, 2], 2: [1, 2], 3: [1, 2], 4: [1, 2]}
儘管我期望:{1:[1],2:[2],3:[],4:[]}
我想這是也許由b [X]引起的只是一個「參考」,它們都指向同一個列表。
然後我用int對象替換[]。結果讓我更加困惑:
In [15]: b=dict.fromkeys([1,2,3,4], 1)
In [16]: b[1] += 1
In [17]: b[2] += 1
In [18]: b
Out[18]: {1: 2, 2: 2, 3: 1, 4: 1}
這個int對象1在這種情況下不是一個參照。
然後,我[ '一']代替[]:
In [19]: b=dict.fromkeys([1,2,3,4], ['a'])
In [20]: b[1].append(1)
In [21]: b[2].append(2)
In [22]: b
Out[22]: {1: ['a', 1, 2], 2: ['a', 1, 2], 3: ['a', 1, 2], 4: ['a', 1, 2]}
現在[ 'A']是再次參考。
有人可以告訴我爲什麼,以及如何在第一種情況下獲得預期結果「{1:[1],2:[2],3:[],4:[]}」。
任何有用的建議表示讚賞。
甚至更好:使用'defaultdict'來避免完全使用'fromkeys'。 – Bakuriu
謝謝,它現在非常有意義。 – AttufliX