码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2018-08-30 10:56:32      阅读:364      评论:0      收藏:0      [点我收藏+]

标签:back   size   bsp   结束   print   pre   color   运行   []   

1 1. l = []
2 2. for i in xrange(10):
3 3.     l.append({‘num’:i})
4 4. print l
1 1. l = []
2 2. a = {‘num’:0}
3 3. for i in xrange(10):
4 4.     a[‘num’] = i
5 5.     l.append(a)
6 6. print l

以上两段代码的运行结果是否相同,如果不相同,原因是什么?

 

上方代码的结果:

1 1. [{‘num’:0},{‘num’:1},{‘num’:2},{‘num’:3},{‘num’:4},{‘num’:5},{‘num’:6},{‘num’:7},{‘num’:8},
2 {‘num’:9}]

下方代码结果:

 

1 1. [{‘num’:9},{‘num’:9},{‘num’:9},{‘num’:9},{‘num’:9},{‘num’:9},{‘num’:9},{‘num’:9},{‘num’:9},
2 {‘num’:9}]

 

 

 

 

那么原因来了:

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

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

标签:back   size   bsp   结束   print   pre   color   运行   []   

原文地址:https://www.cnblogs.com/lmh001/p/9558071.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!