我正在阅读thispost,现在正在尝试创建一个类来修改字典,并将修改后的字典存储在一个新变量中,而不会对原始字典产生任何影响。代码如下:
dict_1 = {'a':[0,1,2]}
print('dict_1 before updating is :', dict_1)
#################################################
class dict_working:
def __init__(self, my_dict):
self.my_dict = (my_dict)
def update_dict(self):
for i in range(len(self.my_dict['a'])) :
self.my_dict['a'][i] = self.my_dict['a'][i]+10
return self.my_dict
#################################################
obj = dict_working(dict_1)
b_dict = obj.update_dict()
print('dict_1 after updating is :', dict_1)
print('A new object after updating is:', b_dict)
但是当我尝试代码时,它也修改了dict_1
变量:
dict_1 before updating is : {'a': [0, 1, 2]}
dict_1 after updating is : {'a': [10, 11, 12]}
A new object after updating is: {'a': [10, 11, 12]}
所以我试着在课堂上deepcopy
查字典,结果正如我所想:
import copy
dict_1 = {'a':[0,1,2]}
print('dict_1 before updating is :', dict_1)
#################################################
class dict_working:
def __init__(self, my_dict):
self.my_dict = copy.deepcopy(my_dict)
def update_dict(self):
for i in range(len(self.my_dict['a'])) :
self.my_dict['a'][i] = self.my_dict['a'][i]+10
return self.my_dict
obj = dict_working(dict_1)
b_dict = obj.update_dict()
#################################################
print('After adding deepcopy method:')
print('dict_1 after updating is :', dict_1)
print('A new object after updating is:', b_dict)
结果是:
dict_1 before updating is : {'a': [0, 1, 2]}
After adding deepcopy method:
dict_1 after updating is : {'a': [0, 1, 2]}
A new object after updating is: {'a': [10, 11, 12]}
我的问题:
Python专家在这些情况下是否也使用相同的deepcopy
方法,或者还有其他方法
另一种方法是考虑您对对象执行的操作类型,并以不影响原始对象的方式复制它。例如,在你的例子中,你不仅仅是在操作字典;您正在对列表字典进行操作,并修改列表,因此需要尽可能地复制列表的元素。然而,如果这些元素本身也是结构,您就不必复制它们的内容
当然,这样做依赖于您非常清楚代码的功能。这很容易,但在更复杂的系统中,很难跟踪。对于这种情况,
deepcopy()
是一种完全有效的方法相关问题 更多 >
编程相关推荐