对列表中的对象所做的更改如何影响所有元素

时间:2017-09-07 21:32:32

标签: python

这是我的问题,

from Link import Link

def generateCompartibleLinks(linksList):
    count =0
    updatedList =[]
    for i,item in enumerate(linksList):
        link = linksList[i];
        for j,item in enumerate(linksList):
            if not linksList[i].sharesNode(linksList[j]):
                link.addCompartibleLink(linksList[j])
        updatedList.append(link)
        print len(updatedList[i].compartibleLinks)
    return updatedList

link1 = Link("a","b",5)
link2 =Link("b","c",1)
link3 = Link("d","b",3)
link4 =Link("d","c",2)

list1 = [link2,link1,link3,link4]

list1 = generateCompartibleLinks(list1)

for link in list1:
    print str(len(link.compartibleLinks))+" : "+link.getLinkInfo()

我希望每个链接(link1,link2,link3,link4)都有一组不同的compartibleLinks,但是一旦对列表中的任何元素进行了更改,它就会反映在每个链接上,而不是我想要的是。 这是课程链接。

class Link(object):
    sendNode =None
    rcvNode =None
    timesToSchedule =1
    isScheduled = False
    compartibleLinks = []
    def __init__(self,sendNode,rcvNode,timesToschedule):
        self.sendNode=sendNode
        self.rcvNode = rcvNode
        self.timesToSchedule =timesToschedule

    def reduceTimeToSchedule(self):
        self.timesToSchedule -=1
        if  self.timesToSchedule<=0:
             self.timesToSchedule=0

    def needsToschedule(self):
        if  self.timesToSchedule==0:
            return False
        else:
            return True
    def addCompartibleLink(self,link):
        self.compartibleLinks.append(link)
    def isCompartible(self,link):
        return any(l == link for l in self.compartibleLinks);
        #if the link is not found in the set.
        return False;
    def sharesNode(self,link):
        return (self.sendNode==link.sendNode or self.rcvNode==link.rcvNode or self.rcvNode==link.sendNode or self.sendNode==link.rcvNode)
    def getLinkInfo(self):
        return 'sender: '+ self.sendNode+" , rec:"+self.rcvNode

我试图查看似乎与我的问题相关的各种解决方案,但没有什么对我有用。

1 个答案:

答案 0 :(得分:-1)

如果我正确理解了您的要求,那么我建议您使用内置的map函数将函数应用于迭代(即您的列表)。当然,您必须修改generateCompatibleLinks函数以接受链接而不是整个列表。