微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python dict.copy() 工作不正常吗? 我的信息:

如何解决python dict.copy() 工作不正常吗? 我的信息:

我正在制作配置程序来帮助用户配置 .json 文件。该程序的功能之一是检查保存的 json 是否与用户创建的新 json 文件相同。如果两个.json不一样,它会告诉用户保存程序中正在配置的.json文件

我的第一个想法是每次检查两个 .json 文件是否相同时都从 .json 文件中读取。它看起来像这样:

# read from the saved json file
new_settings = {"key1": 1,"key2": 2,"array1": []} # json.load(open('config.json','r').read())
# modifying new_settings
new_settings['array1'].append('Data')

def checkIsDifferent():
    # read from the saved json file
    saved_settings = {"key1": 1,'r').read())
    if saved_settings == new_settings:
        print('Configuration is saved')
    else:
        print('(*)Configuration is not saved')

在我的情况下,我认为经常从文件中读取不是比较“设置”的好方法,所以我想出了另一种方法,将保存的 .json 复制到变量,然后使用变量进行比较:

saved_settings = {"key1": 1,"array1": []} # read from the saved json file
new_settings = saved_settings.copy()

# modify
new_settings['array1'].append('Data')

def checkIsDifferent():
    if saved_settings == new_settings:
        print('Configuration is saved')
    else:
        print('(*)Configuration is not saved')

一个解决方案符合预期。运行 checkIsDifferent() 函数输出“(*)Configuration is not saved”。但是当我在第二个解决方案上运行 checkIsDifferent() 时,它输出了“配置已保存”。

python 中的 dict.copy() 坏了吗?对于第二种解决方案,我该如何修复它?

我的信息:

Python 版本:Python 3.8.5(tags/v3.8.5:580fbb0,2020 年 7 月 20 日,15:43:08)[MSC v.1926 32 位(英特尔)]

操作系统:Windows 10

解决方法

copy() 只会复制对任何非原始类型的引用。改用深拷贝。

from copy import deepcopy

saved_settings = {"key1": 1,"key2": 2,"array1": []} # read from the saved json file
new_settings = deepcopy(saved_settings)
# modify
new_settings['array1'].append('Data')

def checkIsDifferent():
    if saved_settings == new_settings:
        print('Configuration is saved')
    else:
        print('(*)Configuration is not saved')

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?