首頁 >後端開發 >Python教學 >淺談python中字典append 到list 後值的改變

淺談python中字典append 到list 後值的改變

不言
不言原創
2018-05-04 14:13:532576瀏覽

這篇文章主要介紹了關於淺談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 l

loop 後可能跟你想要的結果並不相同。

即使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這個方法的關係)

深層的copy

import copy
a={'q':1,'w':[]}
b=copy.deepcopy(a)

#相關推薦:

##Python 建立空的list,以及append用法講解


以上是淺談python中字典append 到list 後值的改變的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn