我设置了dict2 = dict1。当我编辑dict2时,原来的dict1也改变了。为什么?
>>> dict1 = {"key1": "value1", "key2": "value2"}
>>> dict2 = dict1
>>> dict2["key2"] = "WHY?!"
>>> dict1
{'key2': 'WHY?!', 'key1': 'value1'}
我设置了dict2 = dict1。当我编辑dict2时,原来的dict1也改变了。为什么?
>>> dict1 = {"key1": "value1", "key2": "value2"}
>>> dict2 = dict1
>>> dict2["key2"] = "WHY?!"
>>> dict1
{'key2': 'WHY?!', 'key1': 'value1'}
当前回答
下面的代码是在dicts上的,它遵循json语法,比deepcopy快3倍以上
def CopyDict(dSrc):
try:
return json.loads(json.dumps(dSrc))
except Exception as e:
Logger.warning("Can't copy dict the preferred way:"+str(dSrc))
return deepcopy(dSrc)
其他回答
使用for循环进行复制:
orig = {"X2": 674.5, "X3": 245.0}
copy = {}
for key in orig:
copy[key] = orig[key]
print(orig) # {'X2': 674.5, 'X3': 245.0}
print(copy) # {'X2': 674.5, 'X3': 245.0}
copy["X2"] = 808
print(orig) # {'X2': 674.5, 'X3': 245.0}
print(copy) # {'X2': 808, 'X3': 245.0}
我遇到了一个奇怪的行为时,试图深度复制类的字典属性w/o赋值给变量
New = copy.deepcopy(my_class.a)不工作,即修改New修改my_class.a
但如果你用old = my_class。A然后new = copy.deepcopy(旧)它工作得很好,即修改new不会影响my_class.a
我不知道为什么会发生这种情况,但希望它有助于节省一些时间!:)
下面的代码是在dicts上的,它遵循json语法,比deepcopy快3倍以上
def CopyDict(dSrc):
try:
return json.loads(json.dumps(dSrc))
except Exception as e:
Logger.warning("Can't copy dict the preferred way:"+str(dSrc))
return deepcopy(dSrc)
Dict2 = dict1不复制字典。它只是为程序员提供了另一种方法(dict2)来引用同一个字典。
如果你的字典是映射类型,你不能.copy()它,但你可以
dict2 = dict1 | {}
它有点模糊,与copy.copy(dict1)相比,我不能说它的性能如何,但它非常简洁。