这是一个关于字典的问题,为什么仅仅只是对ems这个键进行操作,其他的键也会被改变?
直接运行就会看到结果,ems的运输中变成了1,圆通和韵达也变成了1,可是我只对ems进行了操作,请问这是为什么呢?
a = [['ems', '无物流信息', '异常'], ['圆通', '运输中', '异常'], ['圆通', '运输中', '异常'], ['圆通', '运输中', '异常'], ['圆通', '运输中', '异常'],
['韵达', '运输中', '异常'], ['圆通', '已签收', '正常'], ['圆通', '已签收', '正常'], ['圆通', '派件中', '正常'], ['圆通', '运输中', '异常']]
c = {}
d = {}
for f in a:
if f[0] in c:
pass
else:
c[f[0]] = {}
if f[1] in d:
pass
else:
d[f[1]] = 0
print(c)
print(d)
for f in c.keys():
c[f] = d
print(c)
c['ems']['运输中'] = 1
print(c)
这里我采用的是for循环的形式给变量c赋值,但是当我采用直接赋值的形式给变量c赋值的时候就不会出现这种情况。
c = {'ems': {'无物流信息': 0, '运输中': 0, '已签收': 0, '派件中': 0}, '圆通': {'无物流信息': 0, '运输中': 0, '已签收': 0, '派件中': 0},
'韵达': {'无物流信息': 0, '运输中': 0, '已签收': 0, '派件中': 0}}
c['ems']['运输中'] = 1
print(c)