我希望下面的代码只会初始化dict_a
,dict_b
以及dict_c
字典。但它似乎具有复制效果:
dict_a = dict_b = dict_c = {}
dict_c['hello'] = 'goodbye'
print dict_a
print dict_b
print dict_c
如您所见,结果如下:
{'hello': 'goodbye'}
{'hello': 'goodbye'}
{'hello': 'goodbye'}
为什么该程序会产生先前的结果,当我期望它返回时:
{}
{}
{'hello': 'goodbye'}
这是因为在Python中,变量(名称)只是对单个对象的引用。当您指定dict_a = dict_b
,你真的复制存储器地址(或指针,如果你愿意)从dict_b
到dict_a
。该词典仍然有一个实例。
要获得所需的行为,请使用dict.copy
方法,或者copy.deepcopy
如果您的字典可能具有嵌套的字典或其他嵌套的对象,请使用。
>>> a = {1:2}
>>> b = a.copy()
>>> b
{1: 2}
>>> b[3] = 4
>>> a
{1: 2}
>>> b
{1: 2, 3: 4}
>>>
问题内容: 这是自动装箱吗? 上面的代码是否会先将int文字8包装为Integer,然后将其引用分配给变量ob?因为Java语言规范在这种情况下没有任何帮助。 问题答案: 上面的代码是否会先将int文字8包装为Integer,然后将其引用分配给变量ob? 是。(或者更确切地说,它将把值装箱到一个对象中,然后将引用分配给变量。实际上,整数值是文字的事实在这里是无关紧要的。例如,它可以是return的
问题内容: 我需要在Java中将序数值转换为枚举值。这很简单: 该方法是隐式的,我无法找到它的源代码,因此是一个问题。 是否分配新数组?如果可以的话,第一次调用时是否应该缓存该数组?假设将非常频繁地调用转换。 问题答案: 是。 Java没有让我们创建不可修改数组的机制。因此,如果返回相同的可变数组,我们将冒有人可以为所有人更改其内容的风险。 因此,在将不可修改的数组引入Java之前,为了安全起见,
问题内容: 在课堂上,我有: 除了可以从参数中提供的对象创建bar的副本之外,还可以在构造函数中包含指向bar的指针,以便更改原始bar会更改此对象中的字段吗? 另一种放置方式: 可以进行设置,以便打印y打印9而不是7? 问题答案: 您的最后一个示例以这种方式工作,因为 int 是基元,它是按值复制的。在第一个示例中,“ this.bar ”将保存对 bar 的引用(某种指针)的副本。因此,如果您
有没有简单的方法来验证对象是否属于给定的类?例如,我可以这样做 但是这需要每次动态实例化一个新对象,只是丢弃它。有更好的方法来检查“a”属于“MyClass”类吗?
我最近一直在玩WireMock(Standalone),觉得它很棒。今天,我注意到,据我所知,WireMock在记录模式下播放已经保存的响应的行为。 我想我可能弄错了,因为知道这一点非常重要,但我在文档中看不到它,除了这个: 笔记 记录器将忽略与已捕获的请求匹配的任何请求。 不清楚这是否意味着: 请求将被路由到第三方服务,并将返回实时响应。或 保存的响应将被返回,在这种情况下,第三方服务将不会受到