AFreeCoder
2017-08-22 17:23
采纳率: 100%
浏览 2.8k
已采纳

python字典值是列表时,字典值被异常修改!!

 dict = {'a':[1,2,3,4,5],'b':2}
x = dict['a']
for i in range(5):
    x[i] = 0
print(dict['a'])

程序运行结果:

 [0, 0, 0, 0, 0]

怎么会这样?谁能帮忙解答一下

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

3条回答 默认 最新

  • 宋哥 2017-08-23 01:36
    已采纳

    x赋值只是引用,可以用深拷贝,这样就不会修改原来的值了。改成如下即可:
    import copy
    dict = {'a':[1,2,3,4,5],'b':2}
    x = copy.deepcopy(dict['a'])
    for i in range(5):
    x[i] = 0
    print(dict['a'])

    点赞 4 评论
  • SeaTalks 2017-08-23 00:34

    这不是异常呀,就应该是这样的
    首先,x=dict['a']代表取出了列表(数组)
    然后,x[i]=0表示将数组里的值修改为0
    最后,print的就是修改之后的。
    值的注意的是,字典里的Key和Value都是对象的引用,不是对象本身。引用没有变,变得只是引用地址空间的值

    点赞 评论
  • T_world 2017-08-23 00:50

    对于python来说,它的传值方式是传对象,也就是传值和传引用结合,因此你的x收到的是一个列表的引用,所以会修改原始值

    点赞 评论

相关推荐 更多相似问题