当前位置: 首页 > 面试题库 >

为什么更新一个字典对象会影响另一个?

怀宇
2023-03-14
问题内容

我有一个嵌套的字典,我们称它为字典d。该词典的键是一个整数,每个键的值是另一个词典。我正在python
2.7上尝试一个简单的代码来更新一个外键的值,但似乎它正在更新外键的ALL的值。

希望这些代码将使其更易于理解。这是我的意见。

>>> template = {'mean':0,'median':0}
>>> d[0] = template
>>> d[1] = template
>>> d[0]['mean'] = 1
>>> d

然后是输出:

{0: {'mean':1, 'median':0}, 1:{'mean':1,'median':0}}

您会看到,我只为d [0] [‘mean’]分配了‘1’,但是d [1]
[‘mean’]也有所更新。如果我增加d键的数量,它将只更改所有d键的所有[‘mean’]值。

我在这里做错什么吗?这是一个错误吗?


问题答案:
>>> d[0] = template
>>> d[1] = template

这两种说法都提出d[0]d[1]指向同一个对象,template。现在,您可以查阅字典有三个名字,templated[0]d[1]。这样做:

d[0]['mean'] = 1

修改字典对象,可以用上述其他名称引用它。

为了按预期工作,您可以创建template对象的副本,如下所示

>>> d[0] = template.copy()
>>> d[1] = template.copy()

现在,d[0]d[1]引用两个不同的字典对象。



 类似资料:
  • 这是我在班级游戏板。在这节课中,我尝试制作一个GameTree来返回这个棋盘上所有可能的下一步动作的列表。当这部分代码运行时,它会影响游戏板,因为它包含了这段代码,导致所有的移动实际上都是在游戏板上进行的,在游戏板上,我只是尝试用一个移动来返回板。下面是Gameboard中的代码: 我不明白为什么这不是简单地创建一个新的游戏板对象,播放有效的移动,并将其添加到列表。相反,在这个for循环结束时,游

  • 问题内容: 我试图了解变量如何在python中工作。说我有一个对象存储在变量中: 如果我分配给,则它们都指向同一个对象: 但是,如果我重新分配或,那就不再正确了: 这两个变量现在具有不同的值: 我不明白为什么变量现在不同。为什么不再是真的?有人可以解释发生了什么吗? 问题答案: Python具有引用 对象的 名称 。对象与名称分开存在,名称与它们引用的对象分开存在。 __ 在为“名称分配名称”时,

  • 问题内容: 在内存使用和CPU消耗方面,在Python中更有效的方法是-字典还是对象? 背景: 我必须将大量数据加载到Python中。我创建了一个只是字段容器的对象。创建4M实例并将其放入字典中大约需要10分钟和6GB的内存。字典准备就绪后,只需眨眼即可访问。 示例: 为了检查性能,我编写了两个简单的程序,它们执行相同的操作-一个使用对象,另一个使用字典: 对象(执行时间〜18sec): 字典(执

  • 结果: 在步骤6中,如果服务器在几分钟内关闭死连接--CY,则新通道CY2将变为单向--从客户端Y发送的数据不能到达服务器,包括ACK数据包,而反之亦然。 如果服务器在很长的时间(例如2小时)内关闭了已死的连接--CY,则不会出现任何问题。 这个问题只在运行NAT时才会发生,至少我们在同一个LAN中运行应用程序时不会重现这个问题(不需要穿越NAT)。 更多信息: 1)第一台计算机上的连接A:192

  • 如果字符串对象被驻留,那么为什么一个对象的变化不会影响其他对象 上述程序的输出将是 假真 以上代码的输出为 真的 这是因为在字符串池中Heloo alredy存在,所以它将字符串插入并引用同一个对象,那么为什么如果我将str1更改为“Heloo java”,那么为什么str仍然有值“Heloo”。因为它们引用相同的对象,所以str的值必须是change public class equalSamp

  • 问题内容: 在我的Java应用程序中,当调用主模块时,我在单独的线程中启动SWT GUI。我需要在主线程中执行一些长时间的操作并更新GUI线程。当我尝试从主线程更新GUI线程(即更改标签文本等)时,出现了。根据我在线阅读的内容,因为SWT不允许非UI线程更新UI对象。如何从主线程更新GUI线程。 我在网上找到了一些示例,但是它们都处理了GUI在主线程中运行并且长时间操作在单独的线程中的情况。我的情