Python中非序列类型期望值拷贝的解决措施
发布时间:2021-11-20 14:32:19 所属栏目:PHP教程 来源:互联网
导读:看下面这段代码: # -*- coding: utf-8 -*- import copy class Present(object): def __init__(self, str_cmd): self._str_cmd = str_cmd print 进入Present时的地址:, id(self._str_cmd) def set_value(self): temp = test_cmd self._str_cmd = copy.deepcop
看下面这段代码: # -*- coding: utf-8 -*- import copy class Present(object): def __init__(self, str_cmd): self._str_cmd = str_cmd print "进入Present时的地址:", id(self._str_cmd) def set_value(self): temp = "test_cmd" self._str_cmd = copy.deepcopy(temp) def get_value(self): return self._str_cmd def print_value(self): # print self._str_cmd print "在Present中被赋值后的地址:", id(self._str_cmd) class Son(Present): def __init__(self, str_cmd): Present.__init__(self, str_cmd) self.str_cmd = str_cmd def Son_print(self): print "Son中的当前地址: ", id(self.str_cmd) self.str_cmd = self.get_value() print "Son中get_value之后的地址", id(self.str_cmd) 代码意图是Son中的str_cmd在Present中值被改变,但是在Son中希望能看到这个改变。如果没有标红的这行,那么程序执行结果如下: 最开始的地址: 39466208 进入Present时的地址: 39466208 在Present中被赋值后的地址: 39426752 Son中的当前地址: 39466208 Son中get_value之后的地址 39466208 在Son中看到的是39466208这个地址的内容,但是Present改变的是39426752,所以虽然名字一样,但实际两个类中看到的变量不是同一个。 如果加上红色的这句,那么结果变成: 最开始的地址: 39138528 进入Present时的地址: 39138528 在Present中被赋值后的地址: 39099072 Son中的当前地址: 39138528 Son中get_value之后的地址 39099072 这个时候get_value之后,Son和Present的str_cmd都已经指向了同一个Id,所以两者看到的已经是同一个变量。 用以上方案可以实现非序列变量的值拷贝,对于序列变量的值拷贝,直接使用copy.deepcopy即可。 (编辑:云计算网_泰州站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |