這裏是我的問題,在列表中的對象進行的變化如何影響所有元素
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()
我希望每一個環節(鏈接1,鏈接2,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
我也想看看,似乎與我的問題,但沒有真正爲我工作的各種解決方案。
這是因爲您每個類只有一個列表,在實例中共享。看到重複。 –
謝謝讓我看看! –
謝謝!你已經救了我的一天。花了幾天搞亂了! –