一 说明:
在做DFS题目时,本人经常使用dict、list和queue;然而,在进行程序递归时,这些变量一经修改,则无法复原。因此,尝试通过将其赋值给新变量,从而避免产生上述问题。
二 解决方案:
2.1 对于字典,在给新字典的键值赋值时,使用“[::]”符号获得原字典相应键的值(这里的值是list类型):
# ## 0 传递字典数据;用来更新障碍周围所需的灯数 new_barrier_dict = {} for keyi in barrier_dict.keys(): new_barrier_dict[keyi] = barrier_dict[keyi][::] # new_barrier_dict[keyi] = barrier_dict[keyi] # 不要写成这样,否则新旧字典均被更新
2.2 对于矩阵而言,逐点获得矩阵元素,然后重新赋值给新队列:
# 填充所在行和所在列的元素 new_Data = [] for rr in range(len(Data)): temp = [] for cc in range(len(Data[0])): temp.append(Data[rr][cc]) new_Data.append(temp) # new_Data = Data # 不要这样写,否则新旧矩阵均实时更新
2.3 对于队列而言,为新队列首先添加一个元素,然后再将原队列的元素添加到新队列中:
## 0.1 存储当前该灯的位置 lamp_str = str(ni_rr) + ';' + str(ni_cc); if lamp_str not in self.stop_keys: new_lamps.append(lamp_str) ## 首先加入一个新元素 else: return False,0 for lap in lamps: # 继承原来的灯 if lap not in self.stop_keys: new_lamps.append(lap) ## 然后再逐个加入 # new_lamps = lamps# 不要这样写,否则新旧队列均实时更新
后记:以上是本人在编程测试时发现的现象及解决办法;未曾深入研究其原理、本质。
如有错误,望指正。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)