(Python)对象字典副本无缘无故被修改
(Python)Object dict copy gets modified for no apparent reason
class Object:
def __init__(self,dict):
self.dict = dict
a = Object({1:"hello",2:"lol"})
b = Object(a.dict)
b.dict.pop(1) #remove the element with key 1
print(a.dict, b.dict)
>>{2: 'lol'} {2: 'lol'}
出于某种原因,“a”对象的字典也被修改了。
我用不同的属性尝试了同样的事情,比如一个 int 变量,但问题没有发生。我真的不知道该怎么办:(
你不是在复制字典,你只是将 a 和 b 指向同一个字典,这就是它改变两者的原因。
您可以使用 dict.copy() 创建浅拷贝。
b = Object(a.dict.copy())
这将复制 dict 但不会复制任何嵌套词典,因为您需要深复制。
import copy
b = copy.deepcopy(a.dict)
class Object:
def __init__(self,dict):
self.dict = dict
a = Object({1:"hello",2:"lol"})
b = Object(a.dict)
b.dict.pop(1) #remove the element with key 1
print(a.dict, b.dict)
>>{2: 'lol'} {2: 'lol'}
出于某种原因,“a”对象的字典也被修改了。 我用不同的属性尝试了同样的事情,比如一个 int 变量,但问题没有发生。我真的不知道该怎么办:(
你不是在复制字典,你只是将 a 和 b 指向同一个字典,这就是它改变两者的原因。
您可以使用 dict.copy() 创建浅拷贝。
b = Object(a.dict.copy())
这将复制 dict 但不会复制任何嵌套词典,因为您需要深复制。
import copy
b = copy.deepcopy(a.dict)