【发布时间】:2017-05-30 13:01:00
【问题描述】:
我的代码:
class World:
def __init__(self, _map, pos):
self.orig_map = _map
self.map = self.orig_map[:]
self.orig_pos = pos
self.pos = list(self.orig_pos)
def reset(self):
self.map = self.orig_map[:]
self.pos = list(self.orig_pos)
def left(self):
if self.pos[1]>0:
self.pos[1]-=1
def right(self):
if not self.pos[1]+1>=len(self.map[0]):
self.pos[1]+=1
def up(self):
if self.pos[0]>0:
self.pos[0]-=1
def down(self):
if not self.pos[0]+1>=len(self.map):
self.pos[0]+=1
def eat(self):
if self.map[self.pos[0]][self.pos[1]]==1:
self.map[self.pos[0]][self.pos[1]]=0
return True
应该发生什么:
>>> w=World([[0,0,0],[0,1,0],[0,0,0]],(0,0))
>>> w.right()
>>> w.down()
>>> w.eat()
True
>>> w.reset()
>>> w.map
>>> [[0, 0, 0], [0, 1, 0], [0, 0, 0]]
会发生什么:
>>> w=World([[0,0,0],[0,1,0],[0,0,0]],(0,0))
>>> w.right()
>>> w.down()
>>> w.eat()
True
>>> w.reset()
>>> w.map
>>> [[0, 0, 0], [0, 0, 0], [0, 0, 0]]
可能出错的地方:self.map = self.orig_map[:]
上述方法对单个列表有效(经过试验和测试),但是,它似乎不适用于嵌套列表。
【问题讨论】:
-
deep_copy它。 See this -
您的意思是上一步中的
w.orig_map吗?在这种情况下,您可以使用copy模块的deepcopy函数。 -
@IljaEverilä 不,我的意思是
w.map。然而,在这一步,它们应该是相等的(价值明智的)但是是不同的对象。 -
对,错过了
reset()电话。 -
取决于
self.orig_map包含的确切内容,deepcopy可能无法工作 stackoverflow.com/questions/1601269/…
标签: python list python-3.x nested-lists