可以在Python中引用字典项吗?

可以在Python中引用字典项吗?,python,reference,Python,Reference,我有一个函数,它使用相同的键重复索引到字典中。是否有可能提及有关项目 def my_function(self, event): self.__observers[event] ... #this is get is performed multiple times observer_ref = self.__observers[event] #can I make this a reference to the value? 更新: 我们的目标是不要复制自己的东西。我在寻找类

我有一个函数,它使用相同的键重复索引到字典中。是否有可能提及有关项目

def my_function(self, event):
    self.__observers[event] ... #this is get is performed multiple times
    observer_ref = self.__observers[event] #can I make this a reference to the value?
更新: 我们的目标是不要复制自己的东西。我在寻找类似C++的行为,例如

int x = 1
int& y = x #reference to y, not a copy

当然。你为什么不试试看呢

不过,正如一篇评论中所指出的,这取决于“引用”的含义。如果按照建议执行,分配给新变量不会改变dict

>>> d = {'a': 1}
>>> d['a']
1
>>> x = d['a']
>>> x
1
>>> x = 2
>>> d
{u'a': 1}

在Python中为名称(变量)赋值时,该变量只是对该值的引用

例如说
self.\uu observators[event]
以空列表开始,下面的代码可以正常工作:

assert self.__observers[event] == []
observer_ref = self.__observers[event]
observer_ref.append(1)                    # this modifies self.__observers[event]
assert self.__observers[event] == [1]

然而,正如BrenBarn所指出的那样,如果你随后给观测者分配一个新的值,它根本不会修改自我。观测者[事件]。

这实际上取决于你所说的“参考”是什么意思。。。这也取决于你将如何处理引用。例如

class Test(object):
    def __init__(self):
        self.__observers = {'event1': {'test':'this'}, 'event2': {'test':'that'}}

    def get_observers(self):
        return self.__observers

    def my_function(self, event):
        observer_ref = self.__observers[event]
        return observer_ref

if __name__ == '__main__':
    t = Test()

    my_event = 'event1'  

    print('From class: {}'.format(t.get_observers()[my_event]))
    my_ref = t.my_function(my_event)
    print('From my_function: {}'.format(my_ref))

    my_ref['something'] = 'else'

    print('From my_function after addition: {}'.format(my_ref))
    print('From class after addition: {}'.format(t.get_observers()[my_event]))

    my_ref = 'something else entirely'

    print('From my_function after re-assignment: {}'.format(my_ref))
    print('From class after re-assignment: {}'.format(t.get_observers()[my_event]))
结果:

From class: {'test': 'this'}
From my_function: {'test': 'this'}
From my_function after addition: {'test': 'this', 'something': 'else'}
From class after addition: {'test': 'this', 'something': 'else'}
From my_function after re-assignment: something else entirely
From class after re-assignment: {'test': 'this', 'something': 'else'}

基本上,如果您的
引用
指向某种类型的对象,则可以使用该引用来操纵该对象。您只是不能将引用的名称重新指定给其他对象,并使其反映在您从中提取引用的原始对象中。

这取决于您认为“引用”的含义。所有赋值都会创建一个引用。不,有关Python中观察者模式的好文章,请参阅,