這篇文章主要介紹了關於淺談python中字典append 到list 後值的改變,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下
##看一個例子
d={'test':1} d_test=d d_test['test']=2 print d#如果你在命令列實踐的話,會發現你改動的是d_test ,但是d 也跟著改變了。 通常這和我們期待的不一樣。
Why?
因為字典d 是一個object ,而d_test=d並沒有真正的將該字典在記憶體中再次建立。只是指向了相同的object。這也是python 提高效能,優化記憶體的考量。 實際場景d={"name":""} l=[] for i in xrange(5): d["name"]=i l.append(d) print lloop 後可能跟你想要的結果並不相同。 即使append到list 中,但是,list中存放的也是一個對象,或者說是字典的地址。而非記憶體中真正的儲存空間。 使用 .copy()方法。可以建立一個新的獨立的字典
d={"name":""} l=[] for i in xrange(5): test=d.copy() test["name"]=i l.append(test) print l
#更新:
##a={'q':1,'w':[]} b=a.copy() b['q']=2 b['w'].append(123) print a print b
這個時候發現a中'q'的值不會改變但是其列表中的值還是發生了改變
因為copy是淺層次copy
但這裡有個track
a={'q':1,'w':[]} b=a.copy() b['q']=2 b['w']=[123] print a print b
直接賦值的話,則不會改變a中的結構(多半是append這個方法的關係)
深層的copyimport copy a={'q':1,'w':[]} b=copy.deepcopy(a)
#相關推薦:
##Python 建立空的list,以及append用法講解
以上是淺談python中字典append 到list 後值的改變的詳細內容。更多資訊請關注PHP中文網其他相關文章!