在python中复制复合对象

2024-05-15 17:11:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个由字符串、列表和两个int组成的复合对象字典。在

我在这个字典中循环,执行一些测试,然后基于这些测试将当前测试的对象保存到一个新的字典中,然后修改一些属性。到目前为止,它已经在新字典中引用了对象,所以当我更改一些属性时,旧对象也会发生更改,我希望避免这种行为。在

我尝试使用copy模块中的copy.copycopy.deepcopy方法,但是由于某种原因,在复制之后我无法更改属性。他们只会保持原样。在

我应该说我对OOP很陌生,所以把所有的建议都指向白痴的水平!在

所以在下面的代码中,pathways是pathway对象的字典,variants只是一个列表。 names()和{}是属于pathway对象的方法。在

以防万一:pathway对象持有属于该路径的基因列表(也是另一个对象)。我想找出变异列表(基因名称列表)中代表了哪些路径,然后返回一个新的(较小的)路径字典,该字典将被修改以记录每个路径中突变基因的数量。addMutant()方法只是增加属于pathway对象的int属性。在

def method(variants, pathways):
    vpathways = {}
            check = 0
            for var in variants:
                for k,v in pathways.iteritems():
                    if(var in v.names()):
                        check +=1
                        vpathways[k] = copy.deepcopy(v)
                        vpathways[k].addMutant()
     return(vpathways)

当我这样做的时候,vpathways确实包含了正确的路径,但是每个路径的突变数量仍然是0。我在addVariant()方法中添加了一个print语句,它肯定会被调用,而且突变属性的数量会增加,但不会在最后一个对象中出现。在

编辑:路径类定义:

^{pr2}$

Tags: 对象方法in路径列表数量字典属性
1条回答
网友
1楼 · 发布于 2024-05-15 17:11:22
vpathways[k] = copy.deepcopy(v)

替换前面包含的vpathways[k],因此最多有一个.addMutant()可以工作。在

相关问题 更多 >