我想更改字典中的一个条目,但结果是每个条目都更改了。你知道吗
假设有一个文件cache.py
:
database = {}
以及同一目录中的main.py
:
import cache
empty_data = {
'chat_id': 0,
'receive': {
'count': 0,
'msg_by': [],
'cmd_by': [],
},
}
def write_data(chat_id, user_id, msg_type):
if chat_id in cache.database:
data = cache.database[chat_id]
else:
data = empty_data
data['chat_id'] = chat_id
data['receive']['count'] += 1
if 'message' in msg_type or 'msg' in msg_type:
data['receive']['msg_by'].append(user_id)
else:
data['receive']['cmd_by'].append(user_id)
cache.database[chat_id] = data
print(cache.database)
然后执行以下命令:write_data(10001, 'Amy', 'msg')
它打印出来:{10001: {'chat_id': 10001, 'receive': {'count': 1, 'msg_by': ['Amy'], 'cmd_by': []}}}
,看起来很正常。你知道吗
但在那之后,如果执行另一个命令write_data(10002, 'Bob', 'cmd')
,结果是:
{10001: {'chat_id': 10002, 'receive': {'count': 2, 'msg_by': ['Amy'], 'cmd_by': ['Bob']}}, 10002: {'chat_id': 10002, 'receive': {'count': 2, 'msg_by': ['Amy'], 'cmd_by': ['Bob']}}}
然而,它应该是:
{10001: {'chat_id': 10001, 'receive': {'count': 1, 'msg_by': ['Amy'], 'cmd_by': []}}, 10002: {'chat_id': 10002, 'receive': {'count': 1, 'msg_by': [], 'cmd_by': ['Bob']}}}
问题是您只有一个
empty_data
dict实例,可以在不同的地方更新。你知道吗当你做
data = empty_data
的时候,你只需要让名字data
引用empty_data
已经引用过的dict,你不需要复制它。所以,在所有放置这个data
的地方,实际上都放了相同的dict你每次都需要单独的新字典。你知道吗
一种方法是让函数在需要时为您创建一个新函数:
输出:
相关问题 更多 >
编程相关推荐