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]

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

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'])

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

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