栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python数组字典牵一发而动全身问题

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python数组字典牵一发而动全身问题

        今天写了段代码,功能为保存每个人获得每种评级的次数,程序经过大幅度简化后基本如下:

keys_dict = ['a', 'b', 'c']
padding_vector = [0, 0, 0]
pairs = [['a', 1], ['b', 2], ['c', 3]]
dict = {}
for key in keys_dict:
    dict[key] = padding_vector
for pair in pairs:
    dict[pair[0]][pair[1] - 1] += 1
print(dict)

        这里的keys_dict就是花名册,pairs中的每一个二元组中,左边的为具体的人,右边的为他得到的评级。本来dict预期的结果是

{'a': [1, 0, 0], 'b': [0, 1, 0], 'c': [0, 0, 1]}

        结果实际输出为

{'a': [1, 1, 1], 'b': [1, 1, 1], 'c': [1, 1, 1]}

        而且在print(dict)后面加上print(padding_vector),padding_vector的结果也是[1, 1, 1]

        但把代码中的dict[key] = padding_vector修改为dict[key] = [0, 0, 0]就可以输出预期结果了。个人推测,python中的字典中的某个key如果直接等于某个对象,那么实际操作不是复制一份对象放在字典里,而是建立一个索引,指向这个对象。因此在最初的代码中,所有键值均指向padding_vector,修改键对应的值也是在修改padding_vector。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/858794.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号