如何在不创建字典值的新副本的情况下将字典分成两部分?
original_dict = {'foo':'spam', 'bar':'eggs'}
keys_for_dict1 = ['foo']
dict1 = {}; dict2 = {}
for key in original_dict:
if key in keys_for_dict1:
dict1[key] = original_dict[key]
else:
dict2[key] = original_dict[key]
这创建了original_dict
值的重复项,因此修改它不会修改dict1
或dict2
。 (通过original_dict.items()
迭代会产生相同的行为。)我的字典中的值是非常大的对象,我想避免重新创建。对于这种分裂为二的场景,我如何捕获new_dict = original_dict
的行为,这些行为通过引用进行复制?感谢。
答案 0 :(得分:1)
您的代码可以满足您的需求。为了更清楚,让我们使用值列表。
original_dict = {'foo':[1,2,3], 'bar':[4,5,6]}
keys_for_dict1 = ['foo']
dict1 = {}; dict2 = {}
for key in original_dict:
if key in keys_for_dict1:
dict1[key] = original_dict[key]
else:
dict2[key] = original_dict[key]
dict1['foo'][2]='a'
print dict1['foo']
print original_dict['foo']
输出
[1,2,'a']
[1,2,'a']
因此,当我编辑dict1['foo']
时,它也更改了original_dict['foo']
,因为您没有创建新副本。这是同一个对象。
作为python中的一般规则,除非你付出额外的努力,当你做a=b
之类的事情时,如果b
是某个对象,那么你实际上是指它们指向相同的事情,不是两个最初相同的对象的指针。除非您付出额外的努力,否则不会创建新副本。