如何引用特定的键/值字典?

时间:2018-10-05 08:22:39

标签: python dictionary reference

我想知道是否有可能引用字典的特定键。

例如,如果我创建字典:

D={0:[1,2,3],1:['a','b','c']}

和对0列表的引用

ref_D_0=D[0]

我可以打印D dict的0键的值

print(ref_D_0)
# [1, 2, 3]

但是如果我修改D字典:

D[0]=[3,2,1]
print(D) # {0: [3, 2, 1], 1: ['a', 'b', 'c']}

然后ref_D_0仍给我D [0]的先前值

print(ref_D_0) 
#[1, 2, 3]

我希望ref_D_0引用D [0]而不是复制它。 我是否误解了有关在python中引用的信息?

3 个答案:

答案 0 :(得分:2)

当您写ref_D_0=D[0]时,值ref_D_0使用字典来查询其当前值(列表[1,2,3])。之后,它与字典没有任何关联,仅与它的0键的值无关。如果更改那个列表*(例如D[0][1] = 5),则ref_D_0的值也会改变。但是,您没有。而是给分配一个新值。您所做的基本上等于

a = [1,2,3]
b = a # they point to the same list
a = [3,2,1] # they don't anymore

总而言之,您并没有误解。 ref_D_0是指D[0]中当前的对象,它不是副本。但是,如果该对象被替换了(而不是 changed ),则您的ref_D_0仍然引用原始对象。

执行所需操作的唯一方法是拥有指向D[0]的指针,但是python中没有这样的东西。

答案 1 :(得分:2)

ref_D_0指的是特定对象。

D[0]指的是同一对象。

D[0] = [3, 2, 1]创建一个新对象,并使D[0]引用它,替换原始对象。

这当然不会影响ref_D_0。为什么要这样?

如果您要修改列表而不是在字典中替换列表,则可以appendinsert,甚至分配给切片,例如D[0][:] = [3, 2, 1]。这将影响ref_D_0,因为它们都仍引用同一对象。

答案 2 :(得分:1)

执行ref_D_0=D[0]时,使变量ref_D_0指向当前保存在D[0]的同一对象。

当您重新分配任何一个时,您都没有修改该对象,而只是修改了变量以引用另一个对象。

D[0]=[3,2,1]

现在D[0]ref_D_0不再引用同一对象,因为您只是将D[0]设置为引用其他对象。

例如,如果您修改对象而不是仅仅重新定义变量,则

D[0].append(0)

然后您将能够看到反映在ref_D_0中的更改,因为这两个变量仍将引用同一对象。