Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将字典的子集另存为新变量,并保留原始字典_Python_Dictionary_Copy_Subset - Fatal编程技术网

Python 将字典的子集另存为新变量,并保留原始字典

Python 将字典的子集另存为新变量,并保留原始字典,python,dictionary,copy,subset,Python,Dictionary,Copy,Subset,我将大型JSON文件作为python中的字典导入。我需要对字典中的一个键执行操作,它本身就是一个列表。我想保持原始导入词典不变 我对Python没有太多经验,但我读到y=x创建了一个新变量y,它引用了x引用的同一个对象。。。。这意味着对y所做的更改也会更改原始变量x 所以如果我用 players =data["Players"] 并对新的变量玩家进行了更改,这会改变原有的规则吗?我已经测试过了,没有看到有什么变化,但我担心我遗漏了什么 我是否需要创建密钥的副本以确保保留原始词典?既然列表是一个

我将大型JSON文件作为python中的字典导入。我需要对字典中的一个键执行操作,它本身就是一个列表。我想保持原始导入词典不变

我对Python没有太多经验,但我读到y=x创建了一个新变量y,它引用了x引用的同一个对象。。。。这意味着对y所做的更改也会更改原始变量x

所以如果我用

players =data["Players"]
并对新的变量玩家进行了更改,这会改变原有的规则吗?我已经测试过了,没有看到有什么变化,但我担心我遗漏了什么

我是否需要创建密钥的副本以确保保留原始词典?既然列表是一个复合对象,我是否需要创建一个deepcopy,以便其中的对象也不是引用? 即:

players = data["Players"].copy()
players = copy.deepcopy(data["Players"]) 

如果指定了dict的特定键,则无需担心使用copy/deepcopy

您可以使用

例如:

数据={ 玩家:[p1、p2、p3] } 创建新对象-不是y=x 玩家=数据[玩家] 引用同一对象-是y=x players2=数据 printf'data id->{iddata}\n图层2 id->{idplayers2}\n图层id->{idplayers}' 结果通知数据和播放器2具有相同的id:

data id     -> 140253164993728  
players2 id -> 140253164993728 
players id  -> 140253164186432

谢谢,这很有帮助。身份检查对我来说将是一个健全的维护者。出于某种原因,我发现y=x关系是如此不直观。