为什么在字典中更改值后,所有其他值也都更改了? [重复]

问题描述 投票:0回答:1

为什么更改字典中指定索引中的值后,所有其他索引值也都发生了变化,为什么会发生这种情况?

with open(BotAccountFile, 'r') as account_file:
        for num, line in enumerate(account_file, 1):
            username = line.split(',')[0].strip()
            BotAccountsLinksList[num] = {'UserName': username, 'Password': line.split(',')[1].strip(),
                                         'CompletedDownload': False}

    BotLinksList = {}
    BotLinksList['LinkData'] = {}
    with open(BotDownloadURIsFile, 'r') as link_file:
        for item in BotAccountsLinksList:
            for num, line in enumerate(link_file, 1):
                BotLinksList['LinkData'][num] = {'Link': line.strip(), 'CompletedDownload': False}
            BotAccountsLinksList[item].update(BotLinksList)

还有我的字典:

BotAccountsLinksList = {}

BotAccountsLinksList = {1: {'UserName': 'user1', 'Password': 'pass1',  
    'CompletedDownload': False, 'LinkData': {1: {'Link': 'www.yahoo.com',  
    'CompletedDownload': False}, 2: {'Link': 'www.google.com',  
    'CompletedDownload': False}}}, 2: {'UserName': 'user2', 'Password': 'pass2',  
    'CompletedDownload': False, 'LinkData': {1: {'Link': 'www.yahoo.com',  
    'CompletedDownload': False}, 2: {'Link': 'www.google.com',  
    'CompletedDownload': False}}}, 3: {'UserName': 'user3', 'Password': 'pass3',  
    'CompletedDownload': False, 'LinkData': {1: {'Link': 'www.yahoo.com',  
    'CompletedDownload': False}, 2: {'Link': 'www.google.com',  
    'CompletedDownload': False}}}, 3: {'UserName': 'user4', 'Password': 'pass4',  
    'CompletedDownload': False, 'LinkData': {1: {'Link': 'www.yahoo.com',  
    'CompletedDownload': False}, 2: {'Link': 'www.google.com',  
    'CompletedDownload': False}}}}

并且我使用此代码仅更改索引1中的一个值:

BotAccountsLinksList[1]['LinkData'][1]['CompletedDownload'] = True # {'Link': 'www.yahoo.com', 'CompletedDownload': True}

但是在运行此代码后,其他索引值也已更改:

BotAccountsLinksList = {1: {'UserName': 'user1', 'Password': 'pass1',  
    'CompletedDownload': False, 'LinkData': {1: {'Link': 'www.yahoo.com',  
    'CompletedDownload': True}, 2: {'Link': 'www.google.com',  
    'CompletedDownload': False}}}, 2: {'UserName': 'user2', 'Password': 'pass2',  
    'CompletedDownload': False, 'LinkData': {1: {'Link': 'www.yahoo.com',  
    'CompletedDownload': True}, 2: {'Link': 'www.google.com',  
    'CompletedDownload': False}}}, 3: {'UserName': 'user3', 'Password': 'pass3',  
    'CompletedDownload': False, 'LinkData': {1: {'Link': 'www.yahoo.com',  
    'CompletedDownload': True}, 2: {'Link': 'www.google.com',  
    'CompletedDownload': False}}}, 3: {'UserName': 'user4', 'Password': 'pass4',  
    'CompletedDownload': False, 'LinkData': {1: {'Link': 'www.yahoo.com',  
    'CompletedDownload': True}, 2: {'Link': 'www.google.com',  
    'CompletedDownload': False}}}}

我在Windows 10 64位系统上使用Python 3.8。

python python-3.x dictionary key-value iterable
1个回答
1
投票
BotAccountsLinksList[item].update(BotLinksList)

正在做

for k,v in BotLinksList.items():
    BotAccountsLinksList[item][k] = v

BotLinksList值将在多个BotAccountsLinksList键之间共享。不要多次重复使用相同的字典或进行深度复制

import copy

BotAccountsLinksList[item].update(copy.deepcopy(BotLinksList))
© www.soinside.com 2019 - 2024. All rights reserved.