2019-07-29 |

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

A
B
C
D
答案:
 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.append(a)
 print 
以上两段代码的运行结果是否相同,如果不相同,原因是什么? 上方代码的结果:
[{‘num’:0},{‘num’:1},{‘num’:2},{‘num’:3},{‘num’:4},{‘num’:5},{‘num’:6},{‘num’:7},{‘num’:8},
{‘num’:9}]
下方代码结果
[{‘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 中的值也会跟着改变,相当于浅拷贝。

解释:
剑指offer

发表评论

    评价:
    验证码: 点击我更换图片
    最新评论