如何解决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 举报,一经查实,本站将立刻删除。