有趣的python问题

版权声明:转载请附此链接 https://blog.csdn.net/qq_42393859/article/details/88013808

考虑以下Python代码,如果运行结束,命令行中的运行结果是什么?

l = [] 
for i in xrange(10):
    l.append({‘num’:i}) 
print l 

在考虑以下代码,运行结束后的结果是什么?

l=[]
a={'num':0}
for i in xrange(10):
    a['num']=i
    l.apppend(a)
print(l)

以上两段代码的运行结果是否相同,如果不相同,原因是什么?
上方代码的结果:
1. [{‘num’ :0},{‘num’ :1},{‘num’ :2},{‘num’ :3},{‘num’ :4},{‘num’ :5},{‘num’ :6},{‘num’ :7},{‘num’ :8}, {‘num’:9}]

下方代码结果:
1. [{‘num’ :9},{‘num’ :9},{‘num’ :9},{‘num’ :9},{‘num’ :9},{‘num’ :9},{‘num’ :9},{‘num’ :9},{‘num’ :9}, {‘num’:9}]

原因是:字典是可变对象,在下方的 l.append(a)的操作中是把字典 a的引用传到列表 l 中,当后续操作修改a[‘num’]的值的时候,l 中的值也会跟着改变,相当于浅拷贝。
 

猜你喜欢

转载自blog.csdn.net/qq_42393859/article/details/88013808