|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
我定义了一个全局变量Process,在一个函数pro_request()(代码第71行)里定义了一个局部变量pro,pro和Process都是列表,
在pro_request()这个函数里我将Process的值赋给pro(一开始用的切片赋值,后改成for循环把Process每个元素添加到pro里,代码第76行)
然后在这个函数里我改变pro某些元素的的值(代码第99行),为什么Process也发生了变化?相关代码已用红色标注。
打印、改变pro值、再打印一次
所有代码:
Process = []
Available = []
Work = []
Finish = []
def get_list(oldlist):
newlist = []
for i in range(len(oldlist)):
if oldlist[i] != ' ':
newlist.append(int(oldlist[i]))
return newlist
def get_sourcenum(v1,v2,c):
if c == '-':
v = list(map(lambda x: x[0]-x[1], zip(v1, v2)))
else:
v = list(map(lambda x: x[0]+x[1], zip(v1, v2)))
return v
def cmp(v1,v2):
flag = 1
for i in range(len(v1)):
if v1[i] > v2[i]:
flag = 0
break
return flag
def init():
global Available
global Process
sourcenum = int(input('请输入资源的种类数:'));
Available = list(input('请输入各资源的数量(以空格分开):'))
Available = get_list(Available)
processnum = int(input('请输入进程的个数:'));
for i in range(processnum):
newprocess = [[0,0,0]]
Max = list(input('请输入第'+str(i+1)+'个进程对各资源的最大需求(以空格分开):'))
Max = get_list(Max)
newprocess.insert(0,Max)
Need = get_sourcenum(newprocess[0],newprocess[1],'-')
newprocess.insert(2,Need)
Process.append(newprocess)
def issafe(pro,ava):
global Work
global Finish
Finish = []
work = ava[:]
Work = []
Work.append(work)
for i in range(len(pro)):
Finish.append('false')
count = 0
while True:
flag = 1
if count == len(pro):
return 1
for i in range(len(pro)):
if cmp(pro[i][2], work) == 1 and Finish[i] == 'false':
work = get_sourcenum(work,pro[i][1],'+')
Work.append(work)
Finish[i] = 'true'
flag = 0
count +=1
break
if flag == 1:
return 0
def pro_request(processname):
global Available
global Process
pro = []
ava = []
for i in range(len(Process)):
pro.append(Process[i])
ava.append(Available[i])
request = list(input('请输入请求的各资源的数量(以空格分开):'))
request = get_list(request)
if cmp(request,pro[processname][0]) == 0:
print('所需资源超过了该进程的最大需求!')
return
elif cmp(request, ava) == 0:
print('尚无足够资源!')
return
else:
print(ava is Available)
print(pro is Process)
ava = get_sourcenum(ava,request,'-')
print(id(pro))
print(id(Process))
#pro[processname][1] = get_sourcenum(pro[processname][1],request, '+')
#pro[processname][1] = list(map(lambda x: x[0]+x[1], zip(pro[processname][1], request)))
for i in range(len(Process)):
print('%s %s' % (Process[i][1],Process[i][2]))
print('\n')
for i in range(len(pro[processname][1])):
pro[processname][1][i] += request[i]
for i in range(len(Process)):
print('%s %s ' % (Process[i][1],Process[i][2]))
pro[processname][2] = get_sourcenum(pro[processname][2], request, '-')
print(pro is Process)
if issafe(pro,ava) == 1:
print('系统处于安全状态,资源可分配!')
Available = ava[:]
Process = pro[:]
#print(pro)
#print(ava)
else:
print('系统进入不安全状态,此次资源分配作废!')
#print(pro)
#print(ava)
for i in range(len(Process)):
print('%s %s %s %s %s' % (Work[i],Process[i][1],Process[i][2],Work[i+1],Finish[i]))
#print(Work[i],end = '')
#print(Process[i][1:],end = ' ')
#print(Work[i+1],end = ' ')
#print(Finish[i],end = ' ')
init()
pro_request(1)
#print(Available)
#print(Process)
|
|