在您的示例中,网格的每个“单元格”都将指向同一个字典 - stocklist
。因此,如果您修改一个“单元格”,实际上所有单元格都会发生变化。
如果您需要在每个单元格中存储不同的dict,您应该创建库存清单的深层副本。
尝试:
import copy
stocklist = {'a': 0, 'b': 0, 'c': 0}
stockmap = [[copy.deepcopy(stocklist) for w in range(WIDTH)] for h in range(HEIGHT)]
在简单示例中,stocklist
不包含任何嵌套字典
`stockmap = [[dict(stocklist) for w in range(WIDTH)] for h in range(HEIGHT)]`
会奏效。但请记住,如果您的stocklist
类似于{'a': 0, 'b': {'c': 0}}
,则内部嵌套字典{'c': 0}
将不会被深层复制,并且每个“单元格”都将共享该字典。
如上所述,您需要实例化一个新对象,例如使用dict
stockmap = [范围(W)中的w的[[dict(stocklist)]范围内的h(HEIGHT)]
否则将使用相同的字典实例。
我们来看看吧:
用你的例子
>>>高度= 3
>>> WIDTH = 3
>>> stocklist = {' a':0,' b':0,' c':0}
>>> stockmap = [[范围内W的库存清单(WIDTH)],范围内的h(HEIGHT)]
>>> stockmap
[[{' a':0,' b':0,' c':0},{' a':0,& #39; b':0,' c':0},{' a':0,' b':0,' c& #39;:0}],[{' a':0,' b':0,' c':0},{' a& #39;:0,' b':0,' c':0},{' a':0,' b': 0,' c':0}],[{' a':0,' b':0,' c':0} ,{' a':0,'':0,' c':0},{' a':0,&# 39; b':0,' c':0}]]
>>> stocklist ['一个'] = 9
>>> stockmap
[[{' a':9,' b':0,' c':0},{' a':9,& #39; b':0,' c':0},{' a':9,' b':0,' c& #39;:0}],[{' a':9,' b':0,' c':0},{' a& #39;:9,' b':0,' c':0},{' a':9,' b': 0,' c':0}],[{' a':9,'':0,' c':0} ,{' a':9,':0,' c':0},{' a':9,&# 39; b':0,' c':0}]]
你可以清楚地看到,修改原始字典中的一个项会影响新创建的列表(网格)
做的
>>> stockmap = [范围(W)中的w的[[dict(stocklist)]范围内的h(HEIGHT)]
>>> stockmap
[[{' a':9,' b':0,' c':0},{' a':9,& #39; b':0,' c':0},{' a':9,' b':0,' c& #39;:0}],[{' a':9,' b':0,' c':0},{' a& #39;:9,' b':0,' c':0},{' a':9,' b': 0,' c':0}],[{' a':9,'':0,' c':0} ,{' a':9,':0,' c':0},{' a':9,&# 39; b':0,' c':0}]]
>>> stocklist ['一个'] = 5
>>> stockmap
[[{' a':9,' b':0,' c':0},{' a':9,& #39; b':0,' c':0},{' a':9,' b':0,' c& #39;:0}],[{' a':9,' b':0,' c':0},{' a& #39;:9,' b':0,' c':0},{' a':9,' b': 0,' c':0}],[{' a':9,'':0,' c':0} ,{' a':9,':0,' c':0},{' a':9,&# 39; b':0,' c':0}]]
使网格保持不变
注意:正如@damgad正确指出的那样,dict不适用于嵌套字典。在这种情况下,您需要使用copy.deepcopy