2014-11-05 66 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