2014-11-05 87 views
0

通常我看到類似的行爲,當我不想要它時,但這次我喜歡有一個變量分配給一個字典的(整數)項目,並且當該值在任何一個我都喜歡在兩個申請。python詞典項目參考作業

也就是說,有一本字典:

>>> a_dict = {'v':1,'r':0} 
>>> r_int = a_dict['r'] 

然後變量[R不具有相同的參考,甚至是相同的值。當分配給r時,['r']仍然具有反之亦然。

但正是我試圖找到是我可以通過這個[R到另一個對象和它的變化主要一個詞典被更新?

如果該項目是一個列表,分配給[R是列表和改變這個列表的元素可以在一個鋸因爲實際上是同一個列表對象。爲了避免我使用副本,但在這種情況下,我需要相反的東西。我喜歡看到:

>>> r_int = 2 
>>> a_dict 
{'v':1,'r':2} 

回答

2

賦值在Python中不起作用。將名稱r重新分配給其他值不會影響其他綁定。

,使這項工作的唯一方法是突變的東西可變的內容,例如列表:

a = {'v': 1, 'r': [0]} 
r = a_dict['r'] 
r[0] = [2] 

但顯然引入了額外的水平。除非你有一個很好的理由,否則只要使用字典本身就好多了。

+0

事實是我必須在這個_r_變量中有一個整數。從它的價值被使用的地方,我不能改變它來管理一個元素的列表。我可以引用_r_來從字典所有者那裏刷新字典,但我希望會有更優雅的替代方案。 – srgblnch 2014-11-05 10:12:12

+1

@srgblnch沒有;如果你想「改變」一個可變容器中的不可變對象,你必須替換它:'a_dict ['r'] = 2'。通讀例如http://nedbatchelder.com/text/names.html – jonrsharpe 2014-11-05 10:33:50

+0

那麼,我最好的選擇是在字典擁有者中擁有一個「更新者」,他可以記住_r_,傳播更改。但是這也需要授予單點訪問權限。謝謝。 – srgblnch 2014-11-05 12:29:09