在字典中存储引用而不是副本

大家好,
我正在将功能存储在字典中(这基本上是为了烹饪
我自己的花哨的Schmancy回调计划,主要是出于学习目的):
....返回" f2" + arg
...
....返回" f1" + arg
...
['f11','f2 2']
好吧,整洁.除了我现在更改功能定义,旧功能
被称为.正确:
{'1':,'2':}
<功能F1在0xB7F0BA04>
....返回"新F1" + ARG
...
<功能F1在0xB7F0B994>
功能F1的地址显然在重新定义时发生了变化.
在作业字典中存储价值副本是合理的
默认行为.
但是,在这种特殊情况下,我需要专门存储
_引用对objects _(例如f1函数),或者我应该说_labels_
(导致对象)?
当然,我基本上可以使用新功能更新字典
定义.
但是我想知道,是否没有办法_in general_专门存储
引用功能/变量/一流对象而不是副本
在词典中?

# 回答1


在17年7月17日,13:45,Mk Python在字典中存储了参考文献,不复制! (除非
您明确使用复制模块)!
在您的情况下,字典中的条目是对同一的参考
F1引用的对象,即0xB7F0BA04的对象.
如果您现在说" F1 = ...:",则F1引用了一个新对象
请致电0xB7F0B994,字典中的条目仍然参考
在0xB7F0BA04处的"旧"对象.
我不知道自动更新您的字典的任何方法
由于没有可能超载分配运算符" =".
但是可能有人可以教我一个新技巧:-)
问候,uwe
# 回答2


在7月17日,晚上9:45,MK ...返回" f2" + arg
...
...返回" f1" + arg
...
['f11','f2 2']
好吧,整洁.除了我现在更改功能定义,旧功能
被称为.正确:
{'1':,'2':}
<功能F1在0xB7F0BA04>
...返回"新F1" + ARG
...
<功能F1在0xB7F0B994>
功能F1的地址显然在重新定义时发生了变化.
我不会那样说.您已经创建了一个新功能,
对原始功能的不同地址,并将名称" F1"绑定到
该新功能.旧功能的地址仍然存储在
词典.
函数(或任何其他对象)可以具有0、1或许多名称:
....打印"以前称为foo的功能"
...
该功能以前称为foo
该功能以前称为foo
嗯 ...
是的,这就是一直在发生的事情,除非您明确地做
副本...某些对象具有复制方法,可以通过
进行完整的切片(seq_copy = seq [:]),否则请在副本上阅读
模块.
# 回答3


乌韦·施密特(Uwe Schmitt)写道:
嗯,我从理论上知道,我想我 遭受了暂时的精神错乱 当我编写对象的"副本"时. 对我来说似乎是python的 存储_labels_引用_Objects_. 在这里,问题是 字典中的标签导致"旧"对象. 从理论上讲,我可以定义从字典继承的类, 用设置器(和Getter)定义属性. 但是我仍然必须 手动更新属性,因此普通字典同样好.

标签: python

添加新评论