Python 如何仅将变量中的数据分配给字典中的值?

Python 如何仅将变量中的数据分配给字典中的值?,python,dictionary,Python,Dictionary,我有一份有一定价值的清单。我需要将列表中的数据作为初始值分配给字典中的所有键。 我希望只将变量的数据分配给键,而不是变量。我返回的代码更改变量值,从而更改每个键的值。 如何仅复制变量中的数据以分配给键。我知道代码已经创建了相同变量的引用。我想知道如何在没有任何引用的情况下分配变量中的数据 #Initialize Dictionary with values of List my_list = [0] * 20 my_dict = {"A_key":my_list ,"B_key":my_list

我有一份有一定价值的清单。我需要将列表中的数据作为初始值分配给字典中的所有键。 我希望只将变量的数据分配给键,而不是变量。我返回的代码更改变量值,从而更改每个键的值。 如何仅复制变量中的数据以分配给键。我知道代码已经创建了相同变量的引用。我想知道如何在没有任何引用的情况下分配变量中的数据

#Initialize Dictionary with values of List
my_list = [0] * 20
my_dict = {"A_key":my_list ,"B_key":my_list,"C_key":my_list}
#Edit Dictionary
my_dict["A_key"][4] = "Changed_Data"
#Print values
print(my_dict)
print(my_list)
实际结果

{'B_key': [0, 0, 0, 0, 'Changed_Data', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 'A_key': [0, 0, 0, 0, 'Changed_Data', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 'C_key': [0, 0, 0, 0, 'Changed_Data', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]}

[0, 0, 0, 0, 'Changed_Data', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
预期结果

{'B_key': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 'A_key': [0, 0, 0, 0, 'Changed_Data', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 'C_key': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]}

[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

发生这种情况的原因是您正在修改主列表,而不是该特定键的值,您可以创建多个列表作为分配它们,也可以在将它们分配到字典时创建列表的多个副本。你可以用下面的方法

my_dict = {"A_key":my_list[:] ,"B_key":my_list[:],"C_key":my_list[:]}
my_dict["A_key"][4] = "Changed_Data"
这里发生的是,您正在将列表从列表的开头复制到末尾。这称为列表切片,从一端到另一端“切片”列表。当您对列表进行切片时,它会将一个新列表从开始索引返回到结束索引

您可以使用,
[0:10]
提供开始索引,其中0是开始,10是结束。如果不提供开始和结束,则返回整个列表。这可用于复制列表

但这仍然是一种称为“浅层复制”的方法,如果在该列表中有一个列表,那么嵌套列表仍然容易对主列表进行编辑。这仍然可以通过一种叫做deepcopy的方法来解决

from copy import deepcopy
old_list = [1, 2, 3, [4]]
new_list = deepcopy(old_list)

发生这种情况的原因是您正在修改主列表,而不是该特定键的值,您可以创建多个列表作为分配它们,也可以在将它们分配到字典时创建列表的多个副本。你可以用下面的方法

my_dict = {"A_key":my_list[:] ,"B_key":my_list[:],"C_key":my_list[:]}
my_dict["A_key"][4] = "Changed_Data"
这里发生的是,您正在将列表从列表的开头复制到末尾。这称为列表切片,从一端到另一端“切片”列表。当您对列表进行切片时,它会将一个新列表从开始索引返回到结束索引

您可以使用,
[0:10]
提供开始索引,其中0是开始,10是结束。如果不提供开始和结束,则返回整个列表。这可用于复制列表

但这仍然是一种称为“浅层复制”的方法,如果在该列表中有一个列表,那么嵌套列表仍然容易对主列表进行编辑。这仍然可以通过一种叫做deepcopy的方法来解决

from copy import deepcopy
old_list = [1, 2, 3, [4]]
new_list = deepcopy(old_list)

可能重复使用
deepcopy
。如果没有它,您将把相同的列表传递给
A_键
B_键
C_键
,不引用变量是什么意思。它应该只从变量复制数据。可能重复使用
deepcopy
。如果没有它,您将把相同的列表传递给
A_键
B_键
C_键
,不引用变量是什么意思。它应该只从变量复制数据。